Make sending stats more asynchronous and batched.

All stats are now put into the relay's CarbonClientFactory's queue.

The queue is now implemented using a collections.deque.  Prior to this
patch, multiple copies of the majority of the queue would be copied
after an stats built up, e.g. after an outage between a relay and one
of its destinations.  If that queue was large, multiple copies of the
vast majority of the list would be copied over and over again.  Lots
of potential for thrashing there.

Now, when a stat is enqueued a write is scheduled via
twisted.internet.reactor.callLater().  A configurable delay, which
defaults to .0001 seconds, is given to allow more stats to enter the
queue, and once that time is up, the queue will be cleared.

Now, when the queue is cleared, once MAX_DATAPOINTS_PER_MESSAGE is
retrieved from the queue and sent, the callLater method mentioned
above will be used again to schedule the next batch.  The delay for
this should be effectively zero (0.000001).

The reason that callLater is being used instead of a loop is to
release the lock on the event loop, allowing metrics to flow in
asynchronously.  This is an attempt to fix the same problem that
https://github.com/mleinart/carbon/commit/9ac8202b54ff4f82a6f7c51529b1d671bb1d56a5,
is trying to fix, but without introducing out-of-order stats.