Massive commit; see full log

This commit adds a basic type system to pbrane.

Variable represents the complete workings of a variable, its type and its
permissions. It overloads standard operators so Variable's can be manipulated
in an intuitive fashion.

Because most of this code is hand done, bin/mkops is now not very usefull. It
is still used for compound operators, so the cop template has remained.

In particular, integer * string has been implemented.

Module type signature has been changed to take a vector of Variables and
return a Variable. For now, this change is rather shoddily done. A lot more
code is likely to change in the module code soon.

The type function in the core module has been added. This gives access to the
string version of the type of a variable at run time.

util::join has been extended with a version to work on Variable since join was
called in the modules several times.

ExpressionTree::evaluate has had major overhalls. There is still no type
annotation done at the AST level, but types should be usable from pbrane.

There are a few regressions (/, ^, more), and probably a few bugs with this.
This is just the first time since the type system was started that the
codebase compiles, so it has been chosen to be the first draft.