initial commit
added following updates:
1) local storage support
2) using observer pattern instead of callbacks to decouple modules
3) general cleaning of code