Now move method returns a future.

Most changes are in Kernel. This solution uses a semaphore to minimize
modifications to the code but a more async solution should be possible.

Closes #3.