raf looping

- uses raf module
- multiple calls to `start()` do not trigger multiple rafs
- a call to `stop()` will forcefully cancel the currently queued animation frame