Allow groups of channels.

In this proof-of-concept, the AppServer should POST a message
of the form:

{
    "messageType": "group-add",
    "groupID": "<some-id-generated-by-the-app-server>",
    "clientEndpoint": "<some-push-endpoint>",
}

to create a new group under the given group ID (if necessary), and
add the endpoint to it. There's no separate "create group" message,
so every group is non-empty upon creation.

The server's reply will be of the form:

{
    "messageType": "group-add",
    "group-ID": "<same-group-id-as-in-the-first-message>",
    "clientEndpoint": "<same-push-endpoint>",
    "groupEndpoint": "<a-group-endpoint>",
    "status": "200"
}

The AppServer can then PUT to the group endpoint returned by the
PushServer whenever it wants to relay a message to all endpoints in
that group.

Using a similar message to the above, the AppServer can also remove
an endpoint from a group by using "group-remove" as the message type.
It is then up to the PushServer to handle groups that become empty
as the result of a removal.