Rationalize `build` and `hack` directories

This also enables incremental builds for dockerized builds.

Fixes #1729
Yep!

```shell
$ set -- "${testcases[@]+${testcases[@]}}"
$ for i; do echo -n "[$i] "; done; echo
[a] [b] [c d    e] 
```