in progress
Merge branch 'master' into graphite
Add a handler to send data to Graphite

The master will send data to Graphite whenever a slave sends a report.

This currently only sends messages over a text protocol.
Simple socket communication test program

In this commit:
    - serv.py listens on port 8001.
    - test.py is a locustfile that (1) opens a socket, sending messages
      to port 8001, and (2) starts a task that sends a GET to port 8000.

Test 1:
    1. Start `python -m SimpleHTTPServer`
    2. Start `python serv.py`. This opens socket to listen on port 8001.
    3. Start `python test.py`. This sends messages to port 8001.

    You should see messages being sent to serv.py, and nothing on the
    SimpleHTTPServer.

Test 2:
    1. Start `python -m SimpleHTTPServer`
    2. Start `python serv.py`. This opens socket to listen on port 8001.
    3. Start `locust -f test.py`. This sends messages to port 8001,
        and sends GETs to port 8000.
    4. Open localhost:8089 in a browser. Start swaring with any number
        of users.

    You should see GETs flowing into SimpleHTTPServer, and see messages
    flowing into serv.py.
Move graphite things to their own file
New graphite code that actually works

A producer is added as an event handler for Locust's slave_report event
to look at incoming statistics and add items to a queue. On the Locust
master process, a separate greenlet is started that opens a socket to
the graphite server. This greenlet pops items off the queue and sends
it to graphite.
Correctly sends data to graphite

The requests per second and response times are sent under keys like:
    locust.POST-zones-zoneID.reqs_per_sec.host-name_b119d1c...
    locust.GET-zones-zoneID.response_time.host-name_b119d1c...
where the last portion is a locust slave id.

These should be sent to a carbon-aggregator instance (port 2023, by
default) which is set up with rules to sum or aveage over all clients
for each request. For instance, in aggregation-rules.conf:

    locust.requests.<request>.reqs_per_sec 1 = sum locust.<request>.reqs_per_sec.*
    locust.requests.<request>.response_time 5 = avg locust.<request>.response_time.*
This would sum the reqs_per_sec over all clients, but maintain separate
statistics for each request. It would average the response_times (over a
5 second interval) using data from all clients.
Merge branch 'graphite'