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.~~