*Actual* death and/or *actual* destruction

In Firefox, we were getting errors because surfaces and contexts
were responding to focus-related events on the window from beyond
the grave. This caused a JS error when closing VE from a dialog
(save dialog or confirm dialog) while a context was being shown,
and another JS error when opening another VE instance afterwards.

To prevent this from happening, make the destructors for these
classes actually destroy and unbind everything. Also move them
to be the first method below the constructor so it's easier
to compare the two, and break them up into sections, explaining
what each section does.

Added the following actions to each destructor:

ve.ce.Surface:
* Remove highlights div
* Detach eventSequencer
* Disconnect OOJS events
* Unbind focusin, focusout and mousedown events on document

ve.ui.DesktopContext:
* Disconnect OOJS events
* Unbind resize event on window
* Discard any deferred modelChange events (clear timeout)
* (why is the ui.Context destructor chainable?!?)

ve.ui.Surface:
* Call context destructor
* Disconnect OOJS events
* Remove lie about return value from (very overpromising) documentation

Bug: 66222
Change-Id: I7d2f2f28a70185bd638f23c9ba23a8221a9db2b8
(cherry picked from commit b096a834c2d4572d0816c659d573ba5e8f88103a)