Implement competing consumers of streams

This PR replaces #292, and has the commit rebased and tidied up for merging
into dev (since the feature branch was very long lived).

As per the original PR, the following is included:

1. Checkpointing
2. Handling server restart
3. RR vs prefer one
4. various settings
5. Back end support for multiple clients
6. Config management in Client API and HTTP
7. Statistics over HTTP
8. Updating subscription config on the fly (causes a subscription drop)
9. Cluster node switches
10. Parked messages/timed retries (note in flight messages will get
    retried no matter what on server take over)
11. Security model for subscriptions
12. Configurable checkpointing strategy

Still outstanding:

1. Combine streambuffer into subscription (state handling is weird between
   them now)
2. Use an actual state machine in the handling (might make it clearer
   whats happening)
3. A few missing tests (on replaying parked messages and on falling back
   to paging)
4. HTTP API for getting messages (already supported in backend)
5. Autoreconnect for client (discussed to leave for later and implement
   for regular subscriptions too)