Added a "Delete Icon" toolbar button to MainWindow.

The corresponding actionIconDeleteIcon() slot gets called when the 
Action has been triggered.
Added a deleteIcon() function to the IconSet class.
Added a parent class for all commands: IconSetCommand

It is responsible for keeping a pointer to the IconSet that the actual
operation is applied on.
First implementation of DeleteIconCommand.

TODO: Test, if redo/undo functionality works as expected.
Added an insertIcon() function to IconSet.
Actually utilized the IconSet observer pattern.

Added IconListModel & ClassificationTreeModel to IconSets observer list.
Moreover notifyObserver is being called upon Modification of the 
IconSet.
I changed Icon.classifications from shared_ptr to a plain raw pointer.

My initial choice of using shared_ptr turned out to be a "smart pointer
beginner's mistake". By not using shared_ptr consequently (e.g.
using a unique_ptr in the Icon class) a bug was induced, that led to 
an Icon's classifications being deleted to early.

Two solutions would have been possible: Using reference counted
pointers wherever IconClassifications are being dealt with, or just using
raw pointers and relying on the classifications' owner to clean 
up properly.

There is no actual shared ownership but, as stated in various other 
documets, IconSet owns both the Icons and IconClassifications.
Thus I decided to stick with the second solution.

My personal lesson learned today is as follows:
"If an object is pointed to by a unique_ptr, this must have happened
for a reason and it does not make sense to have a shared_ptr to that
very object at the same time"
Added a function to return a list of currently selected Icons.
Added a TODO note: Current state does not provide undo functionality.
Added deleteIcon() and getActiveIconSet() function.
Added a performCommand() function, that expects a IconSetCommand
MainWindow retrieves the active Icon and emits the right delete signal.
Updated the UML.