Allow non-trivial expressions in `INSERT` statements

These changes really address two issues:
- Early on in planning, the method `refineValueType` was not robust to cast expressions.
- When assigning non-trivial expressions to the partitioning column in an `INSERT` statement, ad hoc planning will mark it as single-partition.  Currently our architecture cannot handle this, so we need to mark these statements as multi-partition.
I like it better, yes.  The notion of being "useful for partitioning" is something I really only want the `StatementPartitioning` class to know about.  Also, when someone wonders, "what kind of expressions can decide how a statement is partitioned," they only need to look one place to find the complete answer.