Asyncronous interface

@lingyan 

First pass at making storage-lru use an async storage interface.  For backwards compatibility/sync interfaces, users can use the SyncWrapper (should I make this automatic?).
Also, to be scalable, we need to avoid using `getSize()` and `getKeys()` on the storage object.  Instead, I would prefer a limited interface like this:

`getItem(key, callback)`
`setItem(key, value, callback)`
`removeItem(key, callback)`
`keys(num, callback)` - list a subset of all keys (especially important for big storages like memcache).

In `purge()`, we can use `keys(num, callback)` to get a subset (size of which is configurable) of keys and iterate through them to find enough space to purge.

WDYT?