Add teardown.
Huge commit:

- Refactor task validation to a separate file
- Use built in assert instead of custom functions
- Refactor automaton running engine, more readable and future proof now
- Insert process.nextTick to kill huge stacks
- Ensure that teardown is run even if subtasks fail
- run() now throws errors early
- Add more tests and improve existent ones
Prevent subtasks description of the init task to be outputted.
Merge branch 'master' of github.com:IndigoUnited/automaton