PLAT-557 owned optional value descriptions

This allows a value description to be obtained of a type, with a null pointer returned (rather than a compilation failure) if the type is unknown to the value description system.

We also allow default construction and destruction to be requested from the value description to allow owned values to be created (previously you could only manipulate values created elsewhere).

There are also type traits changes needed to work around missing traits in GCC 4.6.

Finally, the empty implementations of methods were replaced with pure abstract methods in ValueDescription, and implemented as empty in PureValueDescription. This makes it safer to implement a new ValueDescription as the compiler will catch missing methods.