Support for creating a store-service for Storm platform

To be able to do leftJoin on a store we need the same object to serve as a store and a service. This is already [supported in the Scalding Platform](https://github.com/twitter/summingbird/blob/1b630690a8efe554ab3fabc9b60965c2c95e2e83/summingbird-scalding/src/main/scala/com/twitter/summingbird/scalding/Service.scala#L46). This adds a trait to the Storm Platform that is of both P#Store and P#Service types. This can be used in jobs that use leftJoin against store. Users in their jobs can call:

```
Storm.storeService(mergeableStore, serviceStore)(batcher)
```
where the mergeableStore is the store for aggregation (delta store) and serviceStore is the store that we use as a service (can be delta store or the total store). For read-modify-write behavior the serviceStore should include the delta store, i.e. serviceStore can be a client store that wraps the delta mergeableStore or a client store that wraps the delta mergeableStore and the offline store (i.e. the total store). 
We still need to distinguish between a service that uses online-only results (ClientStore(online)) and the one that combines online and offline (ClientStore(online, offline)). So, in user code, this would be:

```
val mergeableStore: MergeableStore[(Long, BatchID), Long] = Memcache.getMemcacheStore[(Long, BatchID), Long](Config.online)
val storeService: CombinedServiceStoreFactory[Long, Long] = Storm.storeService(mergeableStore)(Config.batcher)
```

or

```
val onlineStore: MergeableStore[(Long, BatchID), Long] = Memcache.getMemcacheStore[(Long, BatchID), Long](Config.online)
val offlineStore: BatchedStore[Long, Long] = VersionedStoreProvider.getVersionedStore[Long, Long](Config.offline)
val storeService: CombinedServiceStoreFactory[Long, Long] = Storm.storeService(onlineStore, offlineStore)(Config.batcher)
```
And we would have to document this so it is clear when to use what. Does this sound reasonable?