fix(cli): cache with correct file perms (#1429)
Fixes https://github.com/vercel/turborepo/issues/156
## Issue Summary
There were two main issues causing this:
1. We're using generic filesystem function for the cache operations. These functions require a file mode for the source file, and a file mode for the destination file. We were setting the incorrect bit here causing all files to be restored from cache with one file mode.
2. When recursively walking files, the walk function we use seems to be [calling the callback with the incorrect file](https://github.com/karrick/godirwalk/blob/master/walk.go#L277) mode (it's always 0)
## The Fix
To fix this, I've made the file copying functions a bit less generalized (they no longer require a source mode, or a destination mode). Instead, they always use the mode of the source file for the destination file. I also pushed the logic of sourcing the source files mode into the Copy function, below where the incorrect mode was being returned from `godirwalk`.
This makes these functions slightly less reusable, but for our purposes, this is what we need. We can always add back generalized versions in the future.