feat(campaigns): persist campaigns into web storage

* move campaignService into its own module
* added unit test for campaignService
* updated campaignService to use localSession

close #14