Using promises (via Q) to mitigate the callback-inception

More info: http://documentup.com/kriskowal/q and http://promises-aplus.github.io/promises-spec/