Create Fingerprint class which encapsulates the Fingerprint calculation 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)