cpp: ome-xml: Split OMEModelObject into interface and implementation

This matches the java design (AbstractOMEModelObject is
detail::OMEModelObject).

In order to accommodate these changes, some adjustments to the
xsd-fu generator and model object template were needed.  Model
objects now have an explicit copy constructor and a deleted
implicit assignent operator.

MetadataRoot was also made a proper interface, and
OMEXMLMetadataRoot updated to match both this and the model
object changes.
cpp: ome-xml: Correct interfaces

Each interface has:
- protected inline constructor
- public virtual inline destructor
- deleted (private unimplemented) copy constructor
- deleted (private unimplemented) assignment operator
- uses virtual public inheritance when inheriting other interfaces

Each interface implementor:
- uses virtual public inheritance for each interface
- has a public virtual destructor