game: better object management

we now have onRegister/onUnregister for all
components, thus we don't need that weak_ptr anymore,
we can simply use shared_ptr and reset it in onUnregister