Promise.fold

Heres the initial pull request, I know this needs to be rebased on dev, will work on this in a moment!