Add Signal.filter

This means that Signals can now be empty (consider
Signal.constant(1).filter(isEven)).

The implementation of empty Signals is a bit janky; might redo this.