Rewrote Data class from scratch

The data class can now hold arbitrary data in a tree like structure and
is a lot more user friendly.
Data can be accessed using the [] and = operators, see the corresponding
test for some use cases.
Data instances can either be structs (holding more data), arrays
(holding an array of basic data types) or immediate values.

There is a config flag, SAFE_DATA, that will enable checks and runtime
warnings if operations are applied to a wrong data type (i.e. member
access on an immediate value). If those are disabled no checks are
performed (less memory and runtime overhead).

Currently only char, int and float are supported data types. The problem
here is that for a template assignment operator to work the type of the
template parameter must be known and we are compiling with -fno-rtti.
There are ways around that but I'm currently not sure if its worth it.