Make gjs_object_require_property deal with ids instead of names

This way we can cache the IDs.
Don't use a property for the keep alive

The keep alive is accessed so often that even using property IDs is slow.
Introduce the concept of "global slots" instead, which are special
hidden properties hanging off the global object. We can't use
regular reserved slots, because the global objects uses some internally,
so we emulate them with the private data and a custom tracer.
While we're there, let's do the same for imports.