Reimplement Movement

We reimplemented the movement logic so that it is move meaningful.
Before this commit movement was just defined as a type class where we
have a function move :: a -> a.  This approach is pretty error prone
because we could basically do anything with this function.  Now Movement
has the type a -> Time -> Vector.  This is generic enough to specify any
movement but specific enougth to prevent changing the object other than
translating it.