re-do user management (-socket.io.clients)

Turns out that io.sockets.clients only returns clients created with the
current instance so is completely unuseable in a multi-instance
environment.  Consequently the strategy of loading socket state with
user information doesn't work either.  Solution: roll my own user state
management and use redis store (again) to ensure it works cross
instance.  Other stuff:-
- some refactoring around tests
- remove some unnecessary console.log statements.
- introduce room state cleanup on restart (introduce new --slave server
parameter so that the cleanup can be skipped for 'other' instances in a
multi-instance environment)