Remove the PublicKey class in favor of Key

The Key class has enough abstraction to represent both a public and a
private key. Most of the routines for PublicKey and Key classes were
the same and Key already had a class method to create representations of
public keys.

Merged all the functionality of PublicKey that was missing from Key,
updated method signatures, tests and data generation scripts.
Update Key class convenience methods

- Added a convenience method for building Key instances from RSA
  private keys.
- Removed type parameter from convenience methods since all the callers
  will be exclusively dealing with RSA keys. If other types are
  required, the raw Key.build method can be used.
- Renamed the name of the Key.public method to Key.public_key and named
  the new method Key.private_key so that there is no conflict with Ruby
  keywords.
Don't keep regenerating keys if they already exist
Fix typo with instance variable name.
Missing use of DIGEST_NAME