Reverse of encodeAmounts: every string that parses as CURRENCY:decimal becomes an
Amount again; any other string (an idempotencyKey, a sku, a source, ...) passes through
unchanged. A string is an encoded amount only when the whole decodeAmountWire parse succeeds.
The inverse walk: every string that parses in full as
CURRENCY:decimalbecomes an Amount again; any other string — an idempotency key, a sku — passes through unchanged. Amounts round-trip exactly through encodeAmounts and back; bare bigints do not — they come back as their decimal strings.