Fix usage of hash function in `_.memoize`.

There is a bug in `_.memoize` where the object which is returned from the cache is always looked up using the first argument, ignoring the custom hash function if one was supplied. The fix is to use the computed `address` as the lookup key. Amazingly, the unit tests did not cover this.

I was a little confused when all I wanted to do was use the second argument of the function as the key and kept getting a return value of `undefined`.

Confirmed the regression and fix with the added unit tests.
> The additional change was an attempt to avoid an extra key lookup on a cache miss

The good news is that on the last `return cache[address]` that the `cache` property always exist so it never has to walk the prototype back and engines will optimize that repeated property access.