Add descriptive trampoline error messages

This adds infrastructure for passing custom error messages for fatal
plan steps. A new RuntimeErrorMessage case class is introduced to
encapsulate the error and is passed down from the planner to codegen.

PlanProcedureTrampoline passes custom error messages for when an
incompatible arity is encountered at runtime. This should be much more
useful than the previous "Runtime cast to subtype pair failed" message.

Closes #2