Switch to ws4py from pyramid_sockjs

Since pyramid_sockjs seems pretty unmaintained, having fallen behind
gevent-websocket quite a bit, and there don't seem to be any actively
maintained pyramid websocket integration libraries, switch to using
ws4py directly.

This change drops support for non-native websockets. As a result, we
have to do our own JSON decoding of the messages.

We also switch to a `gevent.pywsgi` based worker of our own. This
worker combines the gevent_pywsgi worker from Gunicorn with the
gevent helpers from ws4py that cleanly shutdown sockets on server
termination.

*Edited by @nickstenning at 2014-12-01T11:11Z*

~~This change refactors the queued streamer to hopefully make it a bit
simpler in a few places.~~

- ~~Rather than having `get_reader` and `get_writer` be both request
  methods and configurator directives just use request methods. This
  eliminates the nasty partial stuff.~~
- ~~Pass the settings to the IQueueHelper implementation rather than
  on every call to `get_reader` or `get_writer`.~~
- ~~Store the queue as a class attribute of the `StreamerSession`.~~
- ~~Start and stop the reader when the first and last clients connect
  and disconnect, respectively.~~
- ~~Skip including the streamer module entirely when the feature is
  disabled, by moving that check to the h module include.~~
- ~~Register an instance of `IQueueHelper` rather than the class itself.
  Otherwise, we would name the interface `IQueueHelperClass`. Add
  the zope.interface.implements decorator to the implementations to
  make this more clear. Looking up a utility by an interface should
  always give an instance of something which implements that interface,
  not a factory or constructor for it.~~
It is an antipattern, but it's not completely forbidden. It's not something
a typical user should have to use but it is there specifically for cases
where you need to do tricky framework integrations. To me this sort of felt
like exactly the time when such a thing was justified.

I think I can avoid it, and I'll see how ugly it gets, by sub-classing the
WebSocketWSGIApplication so that I can pass it along.