Handle long frames by return 400.

Netty is weird in that in tries to create a message out of whatever is left in the buffer after I return the 400. Likely this is a problem of me not knowing how to do something right within netty, but I couldn't figure it out after a little searching.

We just squelch the empty message errors for now.
Merge pull request #325 from gdusbabek/400_on_long_frames

Handle long frames by return 400.
add a coarse rate-limiting feature to migrations
Fix integer overflow problem in the date computation.

Also, add a backoff + retry strategy for queries.
fix locator cache

We check a cache to see if we've written a locator to cassandra yet, but
aren't using the same key that we use to update the cache as we use to
check the cache. This causes us to write the locator to cassandra every
time.

By checking the cache for the string representation of the locator we
avoid writing locators to cassandra every time we see that metric.

Fix failing unit test

The testEnsureNumericMetricsDoNotEndUpInStringSpaces test is failing now
that the cache works because another test in
`AstyanaxReaderIntegrationTest` inserts a metric with the same name:
`long_metric`. We need to invalidate the locator cache to ensure that
this test, and similar ones in the future, do not fail.

fix tests without exposing unsafe call to insertedLocators.invalidateAll
Merge pull request #327 from gdusbabek/migration_fix_date

Fix integer overflow problem in the date computation.
remove errant imports.
Merge pull request #326 from gdusbabek/migrate_rate_limit

add a coarse rate-limiting feature to migrations
Switch from reflection to using mockito Whitebox per gdusbabek
Merge pull request #328 from dlobue/fix_locator_cache

fix locator cache
Remove abort rejection handler from ingest pipeline

We do not want to use the abort rejection handler on the batch writer.
This will discard writes if the incoming data starts to overwhelm the
batch writers, and we won't even be aware of it unless we look at the
logs.

We should use the default rejection handler which will still process the
data.
memoize computeShard

Part of calculating the md5sum is `MessageDigest.getInstance()`, which
is a blocking operation. Memoizing computeShard stops us from calling
this too often and is a massive speed up.
Merge pull request #332 from dlobue/memoize_computeshard

memoize computeShard
Merge pull request #333 from dlobue/remove_abort_rejectionhandler

Remove abort rejection handler from ingest pipeline