Compiler: add NewtonSolveSystem() and tweak return type of NewtonSolve().

Now the NewtonSolve... built-in functions use dynamic return type for the
collection domains. Also, it was necessary to add a new dynamic return type
capability: array size. This was needed for NewtonSolveSystem().
Back-end: added newtonSolveSystem() and support classes.
Compiler: modify cpp codegen for array and functions.

For arrays literals we now use the makeArray() helper instead of the
constructor, this avoids specifying the type of the array at that point.

For functions, we now use a std::function<...> type instead of auto. This
makes it easier to specify the type of newtonSolveSystem() in the back-end.
Example: update heateq_timesteps to current compiler output.
Examples: add twophase_fully_implicit.