JWS: let app specify accepted algs and validation policy

JWS specifies that which algorithms are acceptable for validation,
and whether one validated signature is sufficient to accept the JWS,
are application decisions.

It also specifies that Unsecured JWS (i.e., the '"none"' algorithm)
MUST NOT be accepted for validation by default.

Add 'ValidationAlgorithms' and 'ValidationPolicy' types for
specifying these parameters, and use Data.Default.Class to provide
conformant default values.  The default 'ValidationAlgorithms'
includes all algorithms except '"none"', and the default
'ValidationPolicy' is that *all* validations attempted (according to
the 'ValidationAlgorithms') must succeed, and there must be at least
one such successful attempt.
JWT: update terminology

IntDate was renamed to NumericDate in the spec.  Update the code to
reflect this change.
JWS: simplify JWS Header representation

In the existing JWS Header representation, "input data" is carried
explicitly in the data type, complicating the Eq instance.
Furthermore, on parse there is a loss of information about which
header fields are conveyed in the protected header or the
unprotected header.

Introduces the 'Armour' abstraction that encapsulates
partial decoding with remembering the input value.

Update the 'Signature' type to include two 'JWSHeader' values, one
armoured (the JWS Protected Header) and one bare (the JWS
Unprotected Header).

The additional expressiveness in having two 'JWSHeader' objects in
the 'Signature' comes (for now) with a loss of expressiveness in
enshrining certain restrictions of the standard in the type.  In
particular, the "alg" requirement and the requirement that no header
parameter appear in both the protected and the unprotected header
are no longer embodied in the types.  Pursuant to this, introduce
new error values that signal these violations of the spec and update
the parsing method to check for them.