Adding back EventLoop and BehaviorLoop

These classes were previously removed because I thought they didn't add
any value. After looking at Loop on the Event class, I realized it had a
different signature than the other methods such as Map, which returned a
new subclass of Event.

Following with this pattern, it was logical to create a new LoopEvent
class, and put the loop behavior in there. However, that breaks how the
loop method is currently being used, since the loop method loops from
the given event onto the current Event. If a new event is created, the
caller would never get the looped updates.

The only way to make this work is to have callers create an instance of
type EventLoop which contains the Loop method, then everything works as
it should.

The only difference between the loop methods in this incarnation that
the previous one is that Loop methods now return "this", to keep with
the signature of the other methods on Event and Behavior.