RFC: Timer callbacks don't need the "user data" pointer
Since Jacek is reviewing the AD2 APIs and suggesting changes, here is one small change I want to suggest.

The timer APIs are currently accepting a closure taking an opaque pointer type.

```nim
  addTimer(node.beaconState.slotStart(slot)) do (p: pointer):
    doAssert validator != nil
    asyncCheck proposeBlock(node, validator, slot.uint64)
```

This is a common pattern used in C to simulate "closure-like" callbacks. With a native support for closures in the language, such an API is quite unnatural and less convenient. The opaque pointer can be removed without any loss of functionality.

For very low-level interop with C, Nim can provide additional helpers for wrapping a C function and pointer into a closure type and also for deconstructing the closure type to its respective pair of pointers.