Causal Streams: Tracing Causality in Distributed Systems