`JWSBuilder::withEncodedPayload()` takes the payload in the form the caller
already holds, instead of forcing a decode just so the builder can encode it
back. GNAP request signing is the case that asked for it: the payload there is
the Base64Url encoded SHA-256 hash of the request body.
Handing such a string to `withPayload()` encodes it twice and silently yields a
token whose payload nobody expects. The new method states the intent and checks
it: the value goes through `Base64UrlSafe::decodeNoPadding()`, so padding, the
Base64 alphabet, impossible lengths and non-canonical trailing bits are all
rejected. That is the strictness `CompactSerializer` already applies when
loading a token, so the builder cannot emit what the library itself refuses to
read back.
An encoded payload contradicts `b64: false`, which removes the encoding
altogether; the combination is rejected whichever order the two are set in.
The method, its name and the use case come from Aaron Parecki in #329.
Closes #329
Co-authored-by: Aaron Parecki <aaron@parecki.com>