Add CarbonPipeline to go along with PicklePipline.

Summary:
It turns out that hostedgraphite doesn't accept pickle data across
UDP, so we have to go back to using the text protocol for now.  So I
added support for carbon text protocol; we now support statsd
protocol, carbon text, and carbon pickle (but only for Pipeline).

I simplified the PicklePipeline implementation by using inheritence
more intelligently.

Test Plan:
Ran a dev-appserver with this code (and event-log.py modified to use
it), and did
   curl localhost:8080
and saw
    DEBUG    2014-04-11 20:23:12,600 event_log.py:137] Would send to statsd: webapp.main%3A-.o.pageload 1 1397247791
    webapp.main%3A-.o.stats.time.wall_ms 1236 1397247792

Reviewers: chris

Differential Revision: http://phabricator.khanacademy.org/D8179
Do best-effort when the buffer is very big.

Just like the original Pipeline() did, don't error out if one
datapoint is bigger than 512 bytes.  Instead, try to send it and hope
the UDP packet goes through.

Auditors: chris

Test Plan:
(None)