[WIP] Query builder read prefs and wrap driver classes directly

This is a rather larger revision to properly support read preferences.

Database and Collection are now constructed with corresponding driver classes, which they wrap permanently. The getter methods no longer act like factory methods, which means it's possible for settings such as read preferences to be assigned and stay in place.

Constructor signatures for core classes (excluding Connection) changed a bit, but there should not be BC breaks for public methods.