refactor(scenario): change abstract functions to constructor arguments, but still require subclassing
fix(scenario): fix base functions being overrideable
fix(scenario): make id and description final to avoid changes
feat(scenario): make sure id and description are valid before using them
feat(scenario): allow a scenario to define a list of it's dependencies and soft dependencies for use on enabling/disabling