agents: monitoring: fixtures: add rate limiting

add rate limiting error fixtures and make the fixtures server handle
rate limiting.

You can test it quickly by moving the limit really low:

    RATE_LIMIT=4 python agents/monitoring/runner server_fixture
monitoring: fixtures: server: clear interval timers

setup infrastructure to clear interval timers if a connection is
destroyed.
monitoring: protocol: introduce errors module

put all of the protocol errors into a single module. Start with
VersionError and ProtocolError
monitoring: client: fix obvious emit problem

self:emit is missing an emission type
monitoring: client: connection_stream: introduce restart

resart logic for existing connections was getting spread out a bit. Put
all of it in the same location.
lib: virgo-init: error_meta is now errorMeta

see luvit utils.c
monitoring: protocol: remove protocol execute

remove protocol execute and make onMessage the only entry point
into ConnectionMessages. Also ensure we are returning errors for
any ConnectionMessages problems that come out of the protocol.
monitoring: client: rateLimitReached

if the client gets an error that is of type rateLimitReached then set a
rateLimitReached flag on it.
monitoring: connection_messages: remove getManifest method

remove getManifest and use request directly. This operates the same.
monitoring: protocol: connection: emit errors from Connection

AgentClient should emit errors so that things like rateLimitReached
errors can be caught by the stream and kill the agent.
monitoring: client: connection_stream: shutdown on rateLimitReached

if the client disconnected or errored out and we are restarting and the
client has rateLimitReached = true then just shutdown the agent.

This logic works off of the AgentClient emitter so should work no matter
who is calling client.protocol:request
monitoring: client: self -> this

this code seems to be written before luvit had an interval timer. This
should be fixed in the near future but for now make sure we use `this`
consistently.
monitoring: connection_messages: improve onMessage cb

Improve the onMessage cb as suggested by Matt. This code acts the same
but is much more "normal" looking when compared to other callbacks.
monitoring: protocol: connection: always have completion

always have a completion that at least checks for errors and emits them.
This is important for catching versioning problems.
monitoring: protocol: connection: args instead of {...}

args is defined, use it.
monitoring: tests: catch top level errors

AgentClientConnection now throws errors if it encounters one. Ensure the
unit tests that expect errors catch this to avoid throwing a top level
error.
monitoring: client: connection_messages: get result in response

In d04cb8f I removed getManifest which pulled out the result field from
the response. Do this logic in fetchManifest.
tools: build: fixup pep8 errors

pep8 errors related to spacing for the new LUVIT_BIN env variable
monitoring: tests: fixup test_bad_version_hello

fixup style a bit by defining the conn as local at creation time.
monitoring: tests: add rate limiting unit test

ensure we get an error out if a hello gets a rate limit error.

Need to change the fixture id to 0 since this unit test will be in
response to the first message.