make symlink asynchronous and usable as a library
restructure so the tests aren't using child_process (now that we can use as library)