Re-work Sketch's Docker setup.

We were being fancy and creating Dockerfiles for folks. This sometimes
worked, but quite often didn't.

Instead, we you have -base-image and -force-rebuild-container, and the
"cache key" for images is just the base image and the working dir.

The layer cake is

  (base image)
  (customization) [optional]
  (repo) [/app]
diff --git a/webui/esbuild.go b/webui/esbuild.go
index ee95943..d310f95 100644
--- a/webui/esbuild.go
+++ b/webui/esbuild.go
@@ -108,6 +108,9 @@
 	return hashZip, err
 }
 
+// TODO: This path being /root/.cache/sketch/webui/skui-....zip means that the Dockerfile
+// in createdockerfile.go needs to create the parent directory. Ideally we bundle the built webui
+// into the binary and avoid this altogether.
 func zipPath() (cacheDir, hashZip string, err error) {
 	homeDir, err := os.UserHomeDir()
 	if err != nil {