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.
Normally, getDefaultDescriptionShared<> will return the same thing that was put in the registry and avoids having to go and look it up.  The extra check here is to handle the case where the SFINAE version returns null due to a getDefaultDescription overload not being included, but it is actually in the registry.