keys: CompositeKey: Add ChallengeResponseKey support

* Each Challenge Response Key consists of a list of regular keys and now
  challenge response keys.
* Copy ChallengeResponseKeys when copying the object.
* Challenge consists of challenging each driver in the list and hashing
  the concatenated data result using SHA256.
database: Pass master seed to challenge response keys

* Pass the master seed from the database to CompositeKey::challenge()
  function which will in turn issue challenges to all selected
  drivers.
format: Add challenge response result to final key hash

* The challengeMasterSeed() function return empty if not present
  maintaining backwards compatability.
* This commit is where the challenge response result is computed into
  the final key  used to encrypt or decrypt the database.
keys: yk: Add YubiKey hardware driver support

* Use compile time detection of the YubiKey libraries and link against
  the libraries if present.  Can be disabled with:

      $ cmake -DCMAKE_DISABLE_FIND_PACKAGE_YubiKey=FALSE

* A stub file provides empty calls for all the function calls integrated
  in to the UI to support this.  In the future a more modular approach
  maybe better, but opting for simplicity initially.
keys: yk: Implement ChallengeResponseKey for YubiKey

* Implement a YubiKey challenge response class.  One object will be
  created for each challenge response key available.
tests: Add YubiKey Tests

* Basic testing for YubiKey code.
gui: Add YubiKey support to widgets

* Add YubiKey support to the GUI widgets.