This could easily be done with 3 changes:
1. Transfer Voting - just like we do for Stack Exchange moderator elections, you pick your favorites in order of preference.
2. Mixed-Member Proportional - For multiple representative bodies, like Congress. This is slightly more complicated as the primary wouldn't determine who is on the ballot, but rather the representatives from each party. In the main election you vote for a party, representatives are select from the party according to the primary.
3. Shortest Straight-line Division - Mathematical way to prevent gerrymandering, which is basically…