settings: dynamically show/hide settings

Based on the request in the team to be able to dynamically show/hide settings based on the (changed) value of another setting I have implemented that feature. Up until now visibility of a setting (control) was a static decision and was made when the list of visible settings was retrieved. To be able to do this dynamically all the potentially visible settings of a category need to be present (but some of the settings may be hidden) so I had to change the functionality of the <visible> tag in the settings XML definition.
I decided to split the original <visible> tag into a new (complex) <requirement> tag and a (simple) <visible> tag. The new <visible> tag simply takes a boolean value ("true" or "false") and is static but is very useful to hide specific settings or groups for a specific platform. The new <requirement> tag basically works exactly the same as the old <visible> tag and can make use of HAS_FOO variables etc (which are requirements for a setting to make sense, hence the name of the new tag).
Dynamic visibility of settings is solved using the existing <dependency> tags with the new type "visible" which can be defined for a setting and can reference a static/dynamic variable or depend upon the value of another setting. Changing the value of a setting will trigger dependency checks on all other settings in the current category and will update their state (enabled/disabled, visible/hidden, ...) if necessary.

With this it should be easily possible to define that a setting should only be visible if another setting has the value X etc.

Note: needs xcode project monkey work.