Add a way to store commonly used property names

Accessing JS properties by name is expensive, because it forces
the JS API to convert them to UTF-8 and atomize them. We can
avoid that by interning property names that we know we need,
and keeping the jsid at hand.

https://bugzilla.gnome.org/show_bug.cgi?id=697592
KeepAlive: use an interned jsid for keep alive name

The keep alive object is accessed very often, so it definitely
benefits from using an already interned jsid instead of converting
and hashing the same string again and again.

https://bugzilla.gnome.org/show_bug.cgi?id=697592
Use interned jsid for "prototype"

Replace all accesses to the prototype property with the jsid variant.
This involves one path, which is object construction.

https://bugzilla.gnome.org/show_bug.cgi?id=697592
Replace remaining get_property with interned jsids

None of these are hot paths, but it helps anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=697592
Get rid of gjs_object_get_property and gjs_object_has_property

They needlessly save and restore the exception state, which is
expensive. Callers that need it should implement it themselves,
but they don't really, so just have them call JS_GetProperty
directly.

https://bugzilla.gnome.org/show_bug.cgi?id=697592
Make gjs_object_require_property deal with ids instead of names

This way we can cache the IDs.

https://bugzilla.gnome.org/show_bug.cgi?id=697592
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.

https://bugzilla.gnome.org/show_bug.cgi?id=697592