Adds the Tags feature
- Creates the class `TaggedObject`, which handles adding, removing, and checking for tags on its subclasses
- Tags are created by creating a subclass of the `Enum` `Tags` and adding elements to the subclass
- `Process` is now a subclass of `TaggedObject` and passes on any tags it owns to new `Process`es it creates
- The decorator `tagged` temporarily stores tags in the `__dict__` of the decorated function in an attribute that is read by `Process.__init__`
- As a result of the above `Process.__init__` does not take tags as an argument, but instead collects them during construction