Added developer facing API - SecureData, CompoundKey, SecureDataBlob, SecureDataTest

SecureData - this is the developer facing API. The developer uses SecureData.getKey(...). They specify the security services that they want the key to provide and then SecureData will generate and return a CompoundKey (see below) that provides these security services.

CompoundKey - this class is used to group together several Keys to perform different operations, for example a signing key and an encryption key. Provides functionality to getSecureData (transform data according to security services), and to checkAndGetData which checks any HMAC or digital signature on the data and decrypts it if it has been encrypted, returning the raw data.

SecureDataBlob - this class represents data that has been transformed according to certain security properties. Data may be encrypted, signed, and/or have an HMAC.

SecureDataTest - JUnit tests testing securing and retrieving data for all possible combinations of security services.
Just throwing this out for discussion: Does it make sense to individually rotate each Key in a CompoundKey? Or should a compound key be more like a CompoundKeyVersion and the user only rotates the top-level Key?