GPS driver rewrite

This is based on Julian's work, with some additional minor cleanup. Does not reflect the most recent state on Julians branch as not stable.

Before merging this needs more cleanup and work, but its a good time to start the review and actively test it.