Dynamic Types

Looking to address issues raised in #521, this allows a Sound Type to be defined via a StringHash or the old enum style and preserves loading the old enum style (but will not serialize it again in the future if the scene is exported).

Editor support added for managed Audio Master Gains. For user defined ones they ui element can be dragged onto a line edit to set the underlying string hash value into that field.

In addition to this allows Cursor Shapes to be defined in a similar manner while preserving the enum for UI, sdl and backwards compatibility (except in cases where GetShape is used as that no longer returns a CursorShape). However serialization has been refactored and is no longer backwards compatible, for example it now looks like:

```
            <variant type="VariantVector" >
                <variant type="String" value="Busy" />
                <variant type="ResourceRef" value="Image;Textures/UI.png" />
                <variant type="IntRect" value="128 64 148 85" />
                <variant type="IntVector2" value="9 9" />
            </variant>   
```

By no means a sure thing, only one way of doing this so feedback more than welcome.