`run` implementation & tests

Also some simpler task registration, async-ness is determined at
runtime, not at registertime.