Direct mode

Besides Direct Mode, this pull request also provides following features:
* Caching invokations for preprocessing
* Caching compiler stderr output (useful in case of preprocessing)
* Fix tiny bug with not using CLCACHE_HARDLINK variable when copying files to cache.
* Provide easy way for change hash algorithm (if someone decides that md5 is not good enough for him).

Note that current pull request changes structure of cache, so objects and manifests will be placed in separate trees.
This helps speed up tree walking during cleanup.