add #defineFactory for custom factories
prevent modifying factories accidentally
better handling of property definitions

- Ensure that they are copied, not modified
- Handle array properties
add browser-compiled version and add bower