Separate Alg type into JwsAlg and JweAlg.

The original JWT spec is now largely irrelevant and the signing and
encrypting cases should really be considered separately.

This allows functions to narrow down the types they accept and is a
step towards supporting separate header types for JWE and JWS.
Docs and formatting.

Added haddock comments plus some tidying.