Add promise interface to step definitions.

A backwards compatible* change to allow a step to return a promise (instead of using a callback). 

*If a step was accessing the callback through the arguments object (instead of with a named argument) AND returned a 'promise like' object, then this code would incorrectly call then on the 'promise like' object, instead of waiting for the callback. This seemed rare enough to not really matter, but worth mentioning anyway.

Thanks!