Make async.memoize() preserve async nature of function

async.memoize() should assume that the given function is asynchronous,
and should maintain that when giving cached results by using
async.nextTick().

See also http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony

Fixes #304