* Change usize to u64 in various places to support 32-bit compilation.
* Fix compilation when redis is enabled and fix tests related to 32-bit support.
This commit just takes the synchronous version and reimplements it with
futures, using necessary combinators and such to prepare for running
commands with futures as well.
All process spawning/waiting still happens in a thread pool, this
commit just refactors methods to push futures all the way to down to the
lowest levels so we can integrate `tokio-process`.
As part of 030ed02ab4 I made `DiskCache::finish_put` write the cache entry to disk asynchronously, where previously it had been synchronous. This caused the `get_cached_or_compile` tests to be racy, specifically `test_compiler_get_cached_or_compile_cached`, which would store a cache entry and then immediately try to retrieve it. I've fixed this by making all the tests wait on the cache write future.