Use dialect dispatch for engine initiailization.

This patch makes use of the new DialectFunctionDispatcher
to remove all conditional logic from within session.create_engine().
The flags that result in various engine connect arguments as well
as subsequent event listeners now fall under the realm of dispatched
functions keyed to their target dialects.   Additionally, this
modernizes the SQLite foreign keys listener to use events.

A test suite is added which via mocks asserts that arguments
expected to be present as well as non-present for a variety of url situations
is added.

Change-Id: Iba5e77e1396eda46ac2c6d6cbca159cbfadf4d04