Add a websocket signaling server impl

PTAL
(Sorry for the previous abandoned requests. I'm new to the github work flow and messed up the repository)
I don't know if I like the word "cache" here, since it's not a cache.  It's more like a message queue.  But I think we could do even better and have something like this:

type message struct {
  sendClientId string
  content string
}

type client struct {
  id string
  msgs []message
}

func (c *client) addMsg(msg message) {
  p.msgs = append(c.msgs, msg)
}

*client newClient(id string) {
  return &client{id}
}

type room struct {
  id string
  clients map[string]*client
}

*room newRoom(id string) {
  return &room{id, make(map[string]*client)}
}

func (rm *room) addMsg(recvClientId string, msg message) {
  if client, found = rm.clients[recvClientId]; !found {
    client = newClient(recvClientId)
    rm.clients[recvClientId] = client
  }
  client.addMsg(msg)
}

type rooms struct {
  lock sync.Mutex
  rooms map[string]*room
}

*rooms newRooms() {
  rms := &rooms{}
  rms.rooms = make(map[string]*room)
  return rms
}

func (rms *rooms) addMsg(roomId string, recvClientId string, msg message) {
  rms.lock.Lock()
  defer rms.lock.Unlock()

  if rm, found = rms.rooms[roomId]; !found {
    room = newRoom(roomId)
    rms.rooms[roomId] = room
  }
  room.addMsg(recvClientId, msg)
}