Temporary branch whilst merging.
This commit contains a major update to how properties and more specifically user interface components are built and managed within Hypersocket.

Previous property code had been built up over a number of years and was inconsistent, each property using widgets from various locations with no consistency in interfaces.

Each user interface 'widget' is now defined in hypersocket-widgets.js and these are independent of properties (so can be used anywhere in html). They all return an object that implements a consistent interface for getting, setting value and accessing options etc. New widgets must conform to this interface.

Properties have been moved out of the core into hypersocket-properties.js and built using the consistent interface defined in widgets. All widgets are available as properties with the benefit now that you can set any of the widgets options directly in the properties xml definition.

There may be some regression with this update.