Support promises in reply() interface. Closes #2097