fix bug where storage events weren't always bound
properly implement async responding in popup and options page