Avoid classloader leak from dangling Timer thread

Previously, when the driver is loaded a static Timer is allocated in the Driver class itself.
That Timer is shared by any TimerTask that gets scheduled (ex: for Statement timeout handling).
If the driver is later unloaded (e.g. in a containerized environment) the Timer thread is never stopped.
Additionally, the Timer thread itself may maintain references to other driver classes that will never get unloaded.

The changed classes now use a SharedTimer that maintains a reference count of requests for Timer.
A Connection requests a Timer via the getTimer() method.
This increments a reference count to keep track of the number of outstanding references.
The Timer reference is marked as returned by calling releaseTimer() in Connection.close().
If there are no outstanding references left, the internal shared Timer object is closed so it's resources can be GCed.

Well behaved JDBC code that calls close() on all Connections should be able to unload the Driver without leaving dangling references.