switching to bluebird promises (won me over)
adding some tests