docs: tighten unValueData canonicality and add scaleValue builtin (#1134)
Specify unValueData canonicality checks: require strictly ascending, distinct keys for both outer (currency symbols) and inner (token names) maps; fail on empty inner maps and zero-quantity entries; keep existing bounds/size constraints.
Add scaleValue builtin to the operation list: multiply all quantities by a provided integer, drop zeros / remove empty inner maps to preserve invariants, and fail on out-of-bounds results.
This allows `unValueData` to simultaneously serve two purposes, the first of which is to enforce that a `BuiltinData` is a canonical multi-asset value in data encoding, the second is to convert that `BuiltinData` to `BuiltinValue`.
Importantly, this should allow the ex-unit cost of `unValueData` to be linear instead of quadratic.