add Key class

Add a Key class that defines `sign' and `verify' functions and
provide instances for JWK and the various algorithm-specific types.
`encrypt' and `decrypt' functions will be added to this class later.

This allows the signing implementations to be nicely divvied up and
pushed down to the types specific to particular algorithms, i.e.
RSA, HMAC, etc.  It will also make it easier to implement other key
types that will Just Work.