server: buildfile: added macros to Dockerfiles

This patch adds macro substitution to Dockerfiles, as well as the
"SET" directive. This is an incomplete patchset (-D flags and proper
documentation still need to be added). This patch *may* break
compatibility with Dockerfiles wthat rely on the '$' being non-special.

Basically, macros work like this:

1. You can SET them, or (in the next few patches) add them using the
   -D flag.
2. Any reference to the macro (in the form $VARNAME) will be
   replaced with the value of the macro.
3. ... unless the macro is in a single-quoted string.
4. ... if the macro is unknown, it is untouched by the substitution.
   (this is to preserve a modicum of compatibility with older Dockerfiles)

This patch will build old Dockerfiles with no problems (unless they
use the '$$' special symbol -- which will be replaced by '$')

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)
server: *: added macro arguments to NewBuildFile

This patch adds the ability for macros to be passed as arguments to
NewBuildFile, which will be used as the initial state of macro values.

The API still needs to be updated to actually pass macro values to the
build.

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)
api: *: add API support for macros

This patch adds support to the server and client APIs to support macros.
The URI /build now accepts another argument, 'macros' which is a mapping
of macros which will be passed to the build before executing it. In the
client, this can be accessed by stringing together -D<VAR>=<VALUE>
arguments.

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)