fix(engine): proper handling of nested commands exceptions

- introduces an additional context, CommandInvocationContext, that holds
  ressources that are related only to the command that is currently executed.
  In contrast to CommandContext, this context is always created when a command
  is executed and holds a reference to the current command. Additionally, it
  can store a Throwable object
- rethrows Throwables whenever a command finishes, regardless whether the
  command is nested in another command or not; enables to put try-catch
  blocks around nested commands

related to CAM-2537