Modernize PrMCTools
- do not explicilty implement functions the compiler will generate implicitly
- do not keep variables with a lifetime scope of an event as members
- prefer std::unique_ptr over raw pointer and delete
- default arguments should be specified in declaration, not definition
- prefer override over virtual
- do not keep constants as member variable, but as static const in an anonymous namepsace
- prefer range-based for loops
- prefer for loop over while
- prefer getIfExists over exists/get combo
- do not check for duplicates while inserting (which is quadratic) but use sort / unique (which is logarithmic)