Add a PicklePipeline class that talks directly to carbon using pickle protocol.

Summary:
The hostedgraphite folks said this to me:

    It may be the case that you don't need to use StatsD at all - by
    default our standard metric collection backend already collects
    min/max/sum/avg and arbitrary percentiles (90pct, 95pct, 61pct
    whatever you like -
    http://docs.hostedgraphite.com/advanced/aggregations.html).

It does seem like their standard metrics would indeed do everything we
need to do.  So I've modified the statsd client to also talk directly
to carbon (the graphite data-reader), using the carbon pickle format
for maximum efficiency:
   http://graphite.readthedocs.org/en/latest/feeding-carbon.html#the-pickle-protocol
   http://docs.hostedgraphite.com/languageguide/lg_python_pickle.html

It's a bit unclear from the documentation whether we can talk pickle
over UDP, but I'm assuming that will work.  I made the minimal changes
I could to this library to support it.

Test Plan:
I modified event_log.py in webapp to use this, and modified the tests
to test that the pickle data is all correct, and these tests passed.

Reviewers: chris

Subscribers: alan

Differential Revision: http://phabricator.khanacademy.org/D8156
Add a PicklePipeline class that talks directly to carbon using pickle protocol.

Summary:
The hostedgraphite folks said this to me:

    It may be the case that you don't need to use StatsD at all - by
    default our standard metric collection backend already collects
    min/max/sum/avg and arbitrary percentiles (90pct, 95pct, 61pct
    whatever you like -
    http://docs.hostedgraphite.com/advanced/aggregations.html).

It does seem like their standard metrics would indeed do everything we
need to do.  So I've modified the statsd client to also talk directly
to carbon (the graphite data-reader), using the carbon pickle format
for maximum efficiency:
   http://graphite.readthedocs.org/en/latest/feeding-carbon.html#the-pickle-protocol
   http://docs.hostedgraphite.com/languageguide/lg_python_pickle.html

It's a bit unclear from the documentation whether we can talk pickle
over UDP, but I'm assuming that will work.  I made the minimal changes
I could to this library to support it.

Oops, my tests were incomplete.  Fix the 'figure out packet size' logic better.

Test Plan:
I modified event_log.py in webapp to use this, and modified the tests
to test that the pickle data is all correct, and these tests passed.

Ran event_log_test in webapp, which includes:

    def test_does_not_fit_in_one_udp_packet(self):
    def test_one_stat_does_not_fit_in_one_udp_packet(self):

Reviewers: chris

Reviewed By: chris

Subscribers: alan

Differential Revision: http://phabricator.khanacademy.org/D8156