Switch to push based implementation

Howdy,

This switches the MVP code to use a very basic push based implementation rather than an array one. Array implementations of FRP events allow for arbitrary access to the past but require large quantities of memory and generally don't match up to the requirements of an infinite stream. The push based approach however gives you a pretty nice way of sticking to the semantics (as long as people follow the rules) without storing the whole past.

One caveat of using a push based implementation is that the following would happen:

    stream = Frappuccino::Stream.new(button)
    button.push
    counter = stream.map {|event| event == :pushed ? 1 : 0 }.inject(0) {|sum, n| sum + n }
    counter.to_i # => 0

This means that you have to declare the event processing you want upfront if you care about the whole stream.

I've also switched the Map class to extend Stream (which I'm guessing would have been the idea eventually anyway).

</:neckbeard:>