Add invalid passing async.memoize() test

This demonstrates the problem described in #304
Test for correct async callback behaviour
Refactor memoize test to use async function

Makes example async function async by using async.setImmediate
Refactor unmemoize test to use async example

Uses async.setImmediate to make example async
Refactor memoize custom hash test

Removes assumption that memoized result is synchronous
async.memoize() preserves 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
Merge pull request #415 from rmg/async-memoize

Make async.memoize() preserve async nature of function