Remove definitions of stl containers with incomplete types

This a fix primarily targeting OS X 10.9 Mavericks with clang/libc++, but in principle the issue likely affects any non libstc++ based toolchain. In essence the problem was that an stl container (```map```) was defined to contain complete instances (not pointers) of the ```TreeElement```class, before this class was fully defined by means of a forward declaration. This behaviour is forbidden by the c++ standard and clang/libc++ rightly refuses to compile this construct. I changed to code to use boost smart pointers instead, while at the same time trying to implement the original semantics of the original illegal code (i.e. copy by value instead by reference).