[feature][refactor] initial implementation of Runstate

Ended up refactoring .singularity.rb environment setup logic into SingularityDsl::Application,
which has its own Runstate object that is updated per-task run.
The idea is that the script describes how the runtime env should be set up. All of those
dependencies need to be injected *somewhere* though, hence SingularityDsl::Application.

The reason why it's a Singleton is because:

1. when .singularity.rb script is loaded the tasks should not be executed. They need to be
   injected *somewhere* though. Having a singleton allows for this - SingularityDsl.load_tasks
   does not need an instance of the application to store the tasks in for later execution.
2. removes the need of throwing other things into the primary Module, other than functions that
   could allow further configuration of the ApplicationA.
3. Application needs to exist during an entire .singularity.rb run.

Also threw in some logic to check on the status of tasks, how to aggregate their results,
how to handle fast-fail scenarios.