Complete re-factoring of the value class. It now stores the underlying value
using a method similar to boost::any.
The type is no longer publicly visible since changing it would cause
casting of the underlying container to the wrong type which would be
very bad.
Now handles a sub-type for the numbers (integral or floating-point). Not much
use right now, but will help with other serialisation methods in the future.
Updated the rest of the tree to use the new values correctly.
Updated the units to use the new values correctly.