Improvements in unit handling.

Among changes:
 - Accept Meter^-2 (with minus sign) and similar.
 - Make UnitNode subclasses reflecting grammar structure.
 - Make proper Equelle output of units.
Treat functions as templates, initial work.

Now generic lambdas are emitted, and auto is used throughout.
Variables are declared but not typechecked in function bodies
(if function was not declared).
Bugfix: check empty() before calling top().
Update examples to match current compiler output.
Add features for template functions.
Use new facility to mark template function.
Add instantiation checking of function templates.

Still some remaining issues:
 - Emitting code, esp. C++ (must emit each instantiation due to On extra argument issue).
 - Check not triggered by function referencing (such as NewtonSolve() argument).
Restore original function state after instantiation.

Instead of clearing the local variables, we restore the original ones.
Code emitting for C++ mostly in place.

Missing: different name for each instantiation (call site and definition).
Give unique names to each instantiaition.
Use full types in C++ output declarations.

Also added for this: setting return types of instantiations.
NewtonSolve() triggers instantiation.

Output should now be correct for the CPU backend.
Update examples to match current compiler output.
No longer require C++14.
Const-correct Dimension::operator+, - and *.
Add units, refactor creation.

We added some more derived units (Joule etc.) and moved the dimension
constants 'length' etc. into Dimension.hpp so it can be used more widely.
Improve dimension mismatch error message.
Started adding dimension support to function calls.
Make NormNode return proper dimensions.

This by itself makes many codes fail, as dimension support is not present in function calls yet.
Handle dimension correctly for template functions.