Moves garbage disposal to main thread and ensures it via SafeHandles.

See http://en.sfml-dev.org/forums/index.php?topic=12248.30

I considered moving the disposal to Window.Clear(), but this necessarily isn't called. Like Window.DispatchEvents() is.

Merged ObjectBase and ObjectBaseSafeHandle since last pull request.