Clean up use of TypedArrays

Avoid using DataView since it's slower than Uint8Array. This means we
need some bitwise stuff when it comes to lengths greater than 125.

In addition, remove the "Send Binary" stuff from the demo. Not sure why
but Chromium WebSocket client seems to replace the application data part
of the payload with the mask key. :(
Use onError and onClose callbacks better
Move server bits to background page

Instead of having the app page launch the server, have the background
page keep track of all that and use messages to interact with the app
page.