Handle buffer corruption

If a buffer is corrupted handle it gracefully and make forward
progress.  Don't crash.

* Chunks of data that are corrupted are stashed in their own file for
  later analysis if desired.

* The bad chunks are _not_ removed from the buffer, simply detected,
  stashed, and skipped.  This doesn't hurt anything because if the
  buffer is re-read for some reason then corruption will simply be
  re-detected.  This is also more in line with the immutable nature of
  merge index.

* A warning log message will be sent providing the file, offset, size
  of the corruption and the stash file location.