Structs
A Supervisor is instantiated to supervise a task that should always be running. A running supervisor will start a component task, and ensure that it is restarted if it ever stops.
Traits
In order to be Manageable, a user defines the following two functions: