Bug 899367 - Only use JSOPTION_UNROOTED_GLOBAL for DOM JSContexts. r=mccr8

We don't cycle collect any other kind, so there's no difference between marking
them gray and letting the JS engine mark them black. This also gets rid of that
nasty code which reset the flag, which billm theorizes has to do with faulty
logic in ContextHolder when creating ephemeral sandbox cxes. The assertion in
this patch should catch us if anything goes wrong.
Bug 899367 - Add an API to determine if we're marking gray. r=billm

This allows us to assert that certain callbacks get invoked during the gray
phase of a marking GC.
Bug 899367 - Explicitly trace outer windows, rather than doing it via JSContext iteration. r=mccr8
Bug 899367 - Explicitly traverse outer windows, rather than doing it via JSContext iteration. r=mccr8

Note that this machinery will go away in further patches. But we want to be
deliberate about each of these steps.
Bug 899367 - Add an API to opt out of default compartment objects. r=luke

We need this explicit API because otherwise the default compartment object will
get set implicitly during the first call to InitClasses.
Bug 899367 - Stop depending on the default compartment object for DOM JSContexts. r=mccr8
Bug 899367 - Have nsGlobalWindow go through nsJSContext to access the outer. r=mccr8
Bug 899367 - Stop storing the window proxy on the JSContext. r=mccr8

We need to simultaneously report the new Heap Pointer to the cycle collector,
and remove the old machinery for cycle-collecting the default object via the
JSContext.
Bug 899367 - Remove JSOPTION_UNROOTED_GLOBAL. r=luke,mccr8

\o/
Bug 899367 - Remove xpc_UnmarkGrayContext. r=mccr8

Default compartment objects are never gray anymore.
Bug 899367 - Remove check for non-WindowProxy objects on an scx. r=mccr8
Bug 899367 - Make GetNativeGlobal consumers call GetWindowProxy and rm the former. r=mccr8

Some of the uses of this are a bit nonsensical now, but that's a problem for
another day.