Split API classes and interfaces

Split previous API files into many more classes and interfaces. Manager and Server APIs were left as-is.

It may be helpful to create a class hierarchy/diagram.
We discussed that both arguments should be removed, and we're be swapping the constructor with `fromDsn()`, since DSN-based construction is the default convention. Servers can be manually constructed with their own options, and we'll have a general factory method to create a Manager with a specific collection of servers.