Improve ObjectsCollection, new callbacks (for engine) + extensibility

engine can call .defineNewProperty() to dynamically add new property
to objects collection.

Also .defineHelperArray() can be called to define array, which can
be useful for calculations in engine, but won't be serialized.
Implement MD2D atoms using ObjectsCollection, refactor engine mainly

This is incremental refactoring. Modeler should be refactored soon,
it still has unnecessary methods like get/set/add/removeAtom.

The significant change is that ObjectsCollection's objects wrappers
are passed and used by the view.
Fix Quantum Dynamics plugin to use new atoms objects collection API

You can see that now we can just call:
  atoms.defineNewProperty("excitation", {type: "int8"});

and arrays (+ view objects!) will have this property. What's more
it's no longer necessary to define "excitation" in atom's metadata.
QD is a plugin, so engine shouldn't have any knowledge about it.