Looks like since we call loseContext() on `WebGLRenderer#destroy()` that
if you create another WebGLRenderer with the same canvas the browser will
recycle that lost context and return it.
This means when we try to use the context it is actually in a lost state.
This change tries to restore a lost context before we use it. It also adds
a debug assert at one location that will be invalid if the context is
invalid.