util/async-reader.go: Fix race condition by only spawning a single .run()
Use util.AsyncReader to build a new async edit.Reader

Now we can start really dealing with signals!