Implements omega semantics

The transitions function now accepts an extra argument: the process that
should be used as Omega (defined in the session), the process that has
already terminated (distinct from but semantically equivalent to STOP).
If not given, synchronous termination semantics are used instead, and
STOP is the result of performing a Tick.
Implements prioritise compression operator
Refactor ptypes

Now uses multiple inheritance instead of the "using" keyword.
Adds UI elements for termination semantics

Now users can freely switch between both forms of termination semantics,
with "obvious" behaviour when it comes to things like new tabs. This
includes an update to the why-not feature to support the new semantics
(and fix a couple of edge cases with the old).
Bug fix

Fixes a bug where Prefix and AlphaParallel would sometimes not load
events, and one where events renamed to themselves would show up in the
output of whyEvent.
Adds error handling.

Errors are now caught and logged, and can be viewed by opening the error
log from the Session menu or by clicking the red exclamation mark that
appears in the status bar. TODO: Currently errors encountered in the
transitions function throw an exception.
Finishes implementation of error handling

Errors now show up in the transitions tree when an erroneous process
appears, if the root process is lazily deemed to be valid. If not, then
the transitions tree does not show up at all. To achieve this, an "error
process" type is added, which stores error messages associated with that
process.