Use Pair<String, String> instead of String concatenation to reduce garba...

...ge when searching in Rex expr caches

Avoid string concatenation when canonizing expressions in `RexProgramBuilder`.
At best we should avoid `Map` altogether (especially when `ProgramBuilder` is created for a known program just to optimize it), however `Pair<String, String>` key will be simpler for creation, hash code check and comparison (i.e. `String` instances will cache their hashCodes, etc)

The assumption is `expr.toString()` and `expr.getType().getFullTypeString()` are garbage-free (those methods just return already existing fields)