Refactoring and minor bugfixes

Maybe I got a little carried away with the refactor... it will probably be easiest to review the commits one at a time, instead of looking at the net diff.

Bugs fixed: 
* #139, zero cost links should no longer exist
* Root range model no longer assumes omnis are always shorter than dishes
* `Format360To180()` now has the correct input range (cosmetic bug only?)