server: buildfile: added more errors and consistency

This patch improves the previous implementation of macro substitution,
regarding the error handling and consistency.

Changes:
* Recursion errors are now detected and return errors.
* Nil macro arguments are treated as empty maps, not as a special case.
* Nested quotes only obey outer-most quote when substituting macros.

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)
server: buildfile: added special case to SET

This patch adds a special case to `SET`, which will unset the macro. The
new format for the `SET` instruction is:

	SET <macro> <expression> # set <macro> to <expression>
	SET <macro>              # unset <macro>

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)
server: buildfile: created more unit tests

This patch adds more unit tests for buildfile.go, mainly testing the
better defined and improved macro definitions. This involves the
replacement of special cases, such as '$$', '$' and '$UNKNOWN', as well
as testing against recursion errors.

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)
docs: sources: reference: builder: added SET docs

This patch adds the relevant documentation about the `SET` instruction and
also documents macros and their use.

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