generalizing the projection storage a little bit
pulled out the stream aggregator to try to centralize it