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?).
I was thinking we could limit the init() call initially with options.initSampleSize and could later finish loading additional keys/values on the first purge with options.maxInitOnPurge.  That way we could optionally load any keys we had missed on our initial call, if applicable.

I was worried if the cache was initialized with too few items (while there were still others saved in the underlying storage), it would essentially start thrashing since it could always be trying to purge.

However this would pretty much be user error, and might be an unnecessary option.