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?).
The reason I did it this way was so that if purgeAttempts was > 1, we wouldn't have to re-build the hash over and over again.  Although if you think this isn't worth it I can move it.