[settings] check control types - the id's have changed so old skins crash

Fairly straight forward, though I'm thinking of two changes to make things cleaner:

1. Make a non-const version of GetControl() to save the insane copy n pasting of c-style casts all over the show.
2. Use dynamic_cast where we need to upcast, so we can NULL check on type anyway.