timers: fix excessive garbage collection

Before this commit, Timer.now() returned a double from the binding
layer. Doubles are heap-allocated and, because Timer.now() is called an
awful lot, it was causing undue strain on the garbage collector.

That's why this commit changes the binding layer to return the
timestamp through a fixed, single-element typed array which neatly
sidesteps the GC issues.

Fixes #5796.