[WIP] Refactor

So this refactor moves around a bit of logic. The biggest change is that all the websocket methods now go directly on the server object rather than the app object. This is because these methods can't be executed anyway when the server hasn't been started, so they might as well be added to the server itself. Other changes made here include:

- Large update of the "usage" readme section
- New events `client_open` and `client_close` emitted from the server to indicate when a client has connected and disconnected via websockets
- Server now keeps track of all connected sockets in an array and ensures that they are up to date as clients connect and disconnect
- The client example and tests have been updated to reflect all these changes