Add support for steps to return promises

Allow step definitions to return promises instead of calling the
callback function directly.  This is a squashed commit of three changes
from the git@github.com:mojotech/cucumber-js.git remote repo.