Separation of concerns for the server package.

Application -> Endpoint -> Connection

Move the session pool to the endpoint to support the same session id for
different endpoints (treated as different connections).

Rework the way options are handled so default versions can be specified
on the server but can be overridden by the endpoint.
Move the routing logic out of the Application object.

Provides a more easily testable interface.