Fix bugs with Stream derivative #on_value

The Map and Select Streams were not respecting the change from an @on_value callback to a @callbacks list (my bad). I've moved this logic (as well as the duplicated Observable calls) into a protected #occur method on Stream to make extending Streams cleaner. I've also added some test cases that drove the changes out.