Avoid ffi

Previously the compiler couldn't optimise `go` and `resume` to be tail recursive. Unfortunately I think `goEff` still has to be done this way.