Wrapped exec and stream contexts in a unifying context.

A SALVEContext is a single object used to carry a variety of state
information between components. Importantly, the expecation that
StreamContexts are treated as immutable is retained, although not
explicitly, by generating new SALVEContexts when referring to different
StreamContexts. All of them share the same ExecutionContext in order to
safely and easily pass globals.