Refactor the `engine` method.

This methods does not croak anymore. The method validate the input by checking
that the engine is actually a valid one, and then return the object if it
exists, or undef.
Add a predicate to the app attribute in the Context object.
Don't need to use eval around a call to the engine method.

The engine method does not croak anymore when an engine is not defined.
Merge branch 'topic/engine' into devel

* topic/engine:
  Don't need to use eval around a call to the engine method.
  Add a predicate to the app attribute in the Context object.
  Refactor the `engine` method.
Update changelog.