add Compiler.intermediateFileSystem
avoid using `path` and `fs` module when possible
move `join`, `mkdirp` and `dirname` into utils
join and dirname is optional in FileSystem interface
remove mkdirp from Filesystem interface
Buffers.concat creates a new buffer. On a large project, when using resolver
cache and pack store, total size of buffer can reach hundreds of megabytes. Use
streaming write instead.