Sketch of WindowedJoin

DO NOT MERGE YET

closes #208

We have so far kept the Service, Sink, and Store types separate even though it feels like a Store is a Service + Sink + get function.  This forces the Store to be a superset of Service and Sink and enables you to always be able to write to a store and to read from a store.

This makes leftJoin against a store just work, and it makes window join easy to implement if we add a new node: AlsoProducer.  We overlooked the need for also producer before, but we hacked it in by using either plus a filter. @sritchie observed that was a wasteful way to implement the flatMapped write in the builder API, but it was convenient.

I think this is an improvement. 

I think this is close to what we want, but looking forward to comments.