Add Signal.collect

- implement Signal.map and Signal.filter using Signal.collect