lib: remove maxQueueLength property

strong-agent and nodefly-{apiserver,collector} don't use it and it's
undocumented.

Its behavior of indiscriminately dropping the oldest messages is also
unlikely to be what you want because it destroys the order of events.

Last but not least, the section of code that it's part of is due to
change significantly in the near future and I don't want to expend
effort keeping something around that is unused.  Ergo, remove it.
lib: rename local uhura events

Prefix internal events with 'uhura:local:' so they don't get confused
with normal events or events sent by the peer.

First step towards solving a bug where events sometimes go missing after
a reconnect.

This commit exposes a race condition in the 'should not lose messages
while disconnected' test that will be addressed in a follow-up commit.

Refs #11.
lib: add control messages

Control messages are tagged with a special property that lets the
receiver recognize them as such.  This lets the control plane move
forward while queueing regular messages until the connection has been
fully established.

Part of the fix for #11.
lib: split pending queue into control and payload

Now that uhura can recognize control messages from normal messages,
split the 'pending messages' queue into two: one for control messages
and one for regular messages.  Pending messages are still dequeued
indiscriminately but that will change in the next commit.

Part of the fix for #11.
lib: add message corking

Cork (that is, queue) normal messages until the uhura handshake has
completed and the connection has been fully established.

Resolves a bug where messages went missing right after (re)connecting
because the user didn't have time to attach event listeners for them.

Fixes #11.
test: use monotonically increasing counter in test

Rewrite the 'should not lose messages while disconnected' to use a
counter instead of random numbers.  Makes it easier to see what messages
are lost (currently the fourth - but only sometimes.)