JWS: fix insecure crypto

Some signing algorithms need random input to be secure.  For
example, ECDSA requires a random number for each signature, or the
scheme is utterly insecure.  RSA needs some entropy for a blinder to
defeat timing attacks.

Update the 'sign' function to take a CPRG and return '(sig,g')' and
chase the API change around.
replace all uses of 'error' with 'Either Error a'

Introduce a custom error type and remove all uses of 'error' by
changing the type to 'Either Error a' and chasing down all the type
errors.