closure environment reference count leak on self-referencing closures
```
import chronos

type X = ref object

proc testit123(xxx: X) {.async.} =
  addTimer(Moment.now()) do (p: pointer):
    asyncSpawn testit123(xxx)

discard testit123(X())
while true:
  poll()

```

we can see how there's only one instance of `xxx` and how each testit123 completes and therefore _should_ release its reference to `xxx` - yet the count keeps growing:
```
[arnetheduck@tempus nim-beacon-chain]$ nim c -r -d:loggc "testit.nim" | grep Xxx
...
[GC] incRef: 0x7f15acdb4038 22 Xxx rc=38256; thread=0
[GC] incRef: 0x7f15acdb4038 22 Xxx rc=38257; thread=0
[GC] incRef: 0x7f15acdb4038 22 Xxx rc=38258; thread=0
...
```

this might very well be a transformation issue - the transformation creates a backreference to the "previous" closure environment so these might simply never get released.
