Alter update method to use change stream
WHAT
Remove the old method of updating the Trie from the database (polling the primary replica instance for its optime), and replace with a subsystem that watches the change stream from the Routes and Backends collections. This also includes altering the driver to use the official mongo go driver.
WHY
The method we're currently using for change detection is to watch the optime on the primary instance of a replica set. This causes problems in govuk-docker (because we have to have a replica set, which no other app using Mongo needs or can really handle), and will prevent us moving to DocumentDB in the stack (because DocumentDB, being an api-compliant wrapper over an aurora database, does not support individual optimes). It's also a bit hacky, because since 3.6 the approved way of watching for changes is to use change streams.
MORE DETAILS
This is very much a first draft of this - the tests work but have race problems, we need tests to check what happens if the database vanishes while the change stream watcher is working (it should handle this, but...), and there may be a simpler or more idiomatic way to do this. I've capitalised on the existing architecture that has a channel in the router structure that can be signalled to reload, so I've brought the change stream watcher out into a separate structure that communicates entirely through that channel with the main router code. It's still a bit tangled though, comments very welcome. I will also try to rebase this so that the commit list becomes a bit nicer and the file comparison can be done without all the noise.