Controller: initial commit

This adds a QVariant/QMetaObject based controller for object and properties
manipulation. Object types and objects are stored in std::map structures for
now. The API is based on the prototype controller. The get/set properties only
handle a single QVariant argument instead of a QVariantList argument as in the
prototype but this can be changed.
Shape: Convert Point to QObject / QPointF

Also add one Q_PROPERTY for each coordinate (x and y) of a Point. This will
enable the controller to set and get these properties.

Since QObjects cannot be copied, we also need to change the Shape class to have
a vector of pointers to Points, instead of actual Point structs.