Return id from redraw

`m.redraw` will now return a getter to wrapping the `requestID`/`timeoutID`.

This also fixes a non-apparent problem with setting `lastRedrawId = -1 || null`, as these may collide with actual `requestID`s, per mdn:

> requestID is a long integer value that uniquely identifies the entry in the callback list. This is a non-zero value, but you may not make any other assumptions about its value.

---

Please make sure to check my type definitions.
I also made an assumption about the logic on L369 in changing the assignment from -1 to 0 - please verify correctness.

---

Fixes #259.
When would this be called? Is `lastRedrawId` ever set to a non-zero falsy value?