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: move path logic into paths module

paths.py will either export the LUVIT_BIN and AGENT_BIN environment
variables if ran or will put these variables into fields in the module.

I needed to do this because I want to be able to run the runner script
outside of tools/build.py
monitoring: fixtures: server: lineEmitter per connection

make the lineEmitter per connection so that we don't end up sending
responses to all three connections.