On-demand Compiler instantiation + fix computeBuildID for --compiler=/my/path

Just a small refactoring.
This moves Compiler to a factory, and avoid instantiating the 3 of them when they are not needed.
Also, it fixes a small bug when you used, eg `dub --compiler=/usr/bin/gdc`, the cache directory was `.dub/build/application-debug-linux.posix-x86_64-/usr/bin/gdc-17DEAD7B0A2CF7221FDFDAB7B4508576/`.
This was a potential security threat due to relatives path.