this allows for more complex destructors, and ensures we don't have multiple backends allocated at once per instance
This is a complete rewrite of the GPS driver structure, with a static main driver and separate backend drivers. This will allow proper support for multiple GPSes, and will allow parameters to be set on the GPS object