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?).
Why are we calling self.keys() on line 760?  Should be just iterating through all meta records to find the ones to purge.

I see what you mean for keys() API.  We can keep your current logic here (instead of sliding window), and optimize Meta.prototype.init avoid re-initing meta record for the keys that already have a meta record created.

meta.records is an array, you might want to iterate through it to create a hash object that remembers each meta record key, so that we can do faster look up when checking whether a key already has meta record.  And at the end of the init, destroy the hash to release memory.