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?).
how does `storage.length` work for an async storage interface?  Also, as the comment in this function says, this is an expensive operation.  We should optimize using sampling to make it work with larger storage systems.