Create Fingerprint class which encapsulates the fingerprint logic

* Makes the Signer interface less susceptible to parameter order
  problem, an issue when both payload and fingerprint was char[]
* Removes a couple of Arrays.copyOf() invocations (since
  Fingerprint is immutable)