Support for disk spill encryption and integrity checking

Two new flags are added:

--disk_spill_encryption (boolean) Turns on encryption when spilling
   data to disk.  Default: false
--disk_spill_integrity (boolean) Turns on integrity checking for
   data spilled to disk.  Default: false

These two flags are independent of each other.

This is implemented in the BufferedBlockMgr, where Blocks that are
about to be written are encrypted and/or MAC'ed, and Blocks that
are read have the MAC verified and/or decrypted.

For encryption we use AES-256-CFB, which means that the key size is
256 bits and the cipher mode is CFB.  CFB is a stream cipher, which
means that it can operate on arbitrary sizes of data.  The AES
implementation can use AES-NI automatically, making it screaming fast.

For an integrity check (aka MAC, or Message Authentication Code) we
use a simple SHA256 hash over the data.

The key, iv, and MAC are stored in memory in the Block instance.
There is a unique key/iv generated each time the Block is written to
disk.  This is not only quite secure, it avoids issues around the
reuse of a stream cipher.

Change-Id: I5858eed93570603c1f20bbbae32ef54a8a1ac89d
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/4410
Tested-by: jenkins
Reviewed-by: Michael Yoder <myoder@cloudera.com>
(cherry picked from commit 03c9ef46ba193968d07113392dfd31e30566078b)
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/4484