Change the pipe API so that it will return a Promise rather than a Defer...

Returning a Promise rather than a Deferred will enable us to pipe in prepared Promises that may have done and fail handlers attached.