Transform and filter operations on streams
Implemented the most important stream operations:
- filter: if a value does not satisfy a predicate, it is not sent to the next node
- transform: for each received value, apply a transformation function and send the result to the next node instead of the original value