Added the ValueInstance class to manipulate objects through reflection.

New class to allow the manipulation of objects and types through the reflection system. The ValueInstance interface is kept pretty minimal for now but it could be improved to contain lots of convenience functions to hide the details of the ValueDescription classes.

There's a few iffy changes in there like the `isPointer()`, `isUniquePtr()` and `isSharedPtr()` functions which would could be replaced by a `getPointerType()` or something similar. Note that these functions are required to not completely screw up the ownership model of the various pointer types.

I added a dereference() function instead of making use of the `optionalGetValue()` mostly because the name poorly describes what it does, the various pointer functions don't implement it in any case and because I frankly am not quite sure what's it's for.

Note that I also had to fix some issues in the description classes whereby all described functions will fail a compile time if they're not move assignable and copy assignable. To fix this I had to implement some of the c++11 type traits which are not implemnted in gcc 4.6 nor in boost 1.52. Once we upgrade the compiler we'll be able to get rid of the `soa/utils/type_traits.h` header because just looking at it gives me a headache.