add frozen attribute to property description

- model.freeze(propertyName)
- model.unfreeze(propertyName)

Property description change events can be observed with:

model.addPropertyDescriptionObserver(propertyName, callback);

Currently the implementation does *not* actually freeze
the property. It just sets or resets and observable property.

This capability makes it easier to notify UI components
like a slider when to enabled or disable themselves so
a user can make changes in the property.

Property description changes are only observed
when using the setPropertyDescription() function, not
when an individual attribute of a property description
is changed.
slider, checkbox, radio, pulldown: support freeze/unfeeze

When any of these components are observing a property
if that property is frozen they will transition to a
disabled state.

When the property is unfrozen they will transition to
an enabled state.
experimentController: freeze input parameters during run