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.
Key contains a list of KeyVersions, which must all provide the same functionality (for example a list of various encryption KeyVersions). These can be rotated one after another.

CompoundKey combines several different Keys. So for example an encryption Key and an HMAC Key. These are used together to provide multiple security services.