Rename factory to rootFactory.
Implement mandatory properties for objects.

* A property name with a "!" suffix is mandatory, in that it must be present in it's containing object. If a mandatory name is omitted from an object, a validation error is emitted.

* Also simplify validation of the "usbDevices" permission: we define a custom schema and re-use a regular json schema validator.
Implement "meta-close-ended" modifier for object definition

* When close-ended is set to true, arbitrary property names are not allowed and imply a validation error.
Make "name" and "version" manifest keys mandatory.
Comments.