Bug 1031132 - Refactor mach environment to use logic from MachCommandBase instead of its own. r=gps a=NPOTB

Also don't print section titles when there is nothing under them, and move
move the ObjdirMismatchException handling to MachCommandBase.
Bug 762358 - Re-run configure when mozconfig changed in a significant way. r=gps a=NPOTB

This adds a format option to mach environment and uses it in client.mk to
create a .mozconfig.json in the objdir, containing all the relevant data
from mozconfig. If the mozconfig doesn't change in a way that alters that
data, we still skip configure.

At the same time, use mach environment in place of mozconfig2configure and
mozconfig2client-mk, which makes us now have only one mozconfig reader.

Also, in the mozconfig reader, keep track of environment variables (as
opposed to shell variables), so that changes such as a variable that was
exported not being exported anymore is spotted. At the opposite, in order
for irrelevant environment variable changes not to incur in re-running
configure, only a set of environment variables are stored when they are
unmodified. Otherwise, changes such as using a different terminal window,
or even rebooting, would trigger reconfigures.

Finally, make mach environment emit both MOZ_OBJDIR and OBJDIR for
client.mk, and cleanup some objdir-related things in client.mk..
At the same time, make the mozconfig reader take MOZ_OBJDIR from the
environment if it is defined there and not in the mozconfig.

Conflicts:
	client.mk
	python/mozbuild/mozbuild/base.py
Bug 762358 - Fixup test_objdir_config_status to use config.guess output as base. r=gps a=NPOTB
Bug 762358 - Fixup the fixup not to break on windows. r=me a=NPOTB
Bug 1031180 - Fallback to checking whether the directory mach lives in contains mach_bootstrap.py. r=gps a=NPOTB