Much more reliable implementation of expr.add_prefix().
Don't allow overriding read-only variables in child scope.
Dump project-level variables in dumper.

Previously, they were hidden from the dump and only toplevel module's
variables were shown.
Format setting placeholders differently from variable refs in str().

Previously, they were indistinguishable, leading to some potential
confusion.  Now placeholders for settings use ${foo} instead of $(foo)
as variables do.
Throw more specific exception when PathExpr.get_exception() fails.
Allow 'if' statement inside 'configuration' blocks.
Don't insert spurious empty strings in split_into_path().

This could happen when '/' was on a boundary between two concatenated
subexpressions (e.g. a literal and a reference).
Call default value callback for properties with the right object.
Allow Unicode strings as properties' default.
Add _srcdir internal property on modules.

This contains the source directory (i.e.  @srcdir) for the module.

It is particularly useful when implementing templates that need to use
expressions relative to the template user's source directory, not to the
file where the template is defined.
Fix docs makefiles to work on Windows.

Setting PYTHONPATH to Unix-like path from Makefile didn't work on
Windows.  Instead, setup BakefileLexer properly from conf.py, avoiding
the need to manipulate the path entirely.
Docs: use nicer Sphinx theme.
Make _get_matching_project_config global.

It's not solution-specific, so making it a global function makes sense -
and it can be @memoized.
Improve expr.are_equal().

Introduce "symbolic" formatting of expressions that is unambiguous and
allows comparing serialized forms of expressions for equality.
Document limited support for configurations.
Implement make-time settings.

Unlike configurations, settings allow configuration of arbitrary
settings, typically things like paths to 3rdparty libraries or tools.

Support for Visual Studio projects not implemented yet.
Documentation: use less detailed contents page.
Never return empty string as srcdir, use ".".

Path manipulation functions from os.path (understandably) break if the
directory is "".
Refactor: split analysis passes into their own file.

Move analysis steps (detecting unused variables, loops, etc.) into their
own module, bkl.interpreter.analyze.
Fix spurious unused var warning for uses in sources {}.

When a variable (typically holding a list of files) was referenced
inside a sources {} or headers {} statement, Bakefile wouldn't detect it
as used and would emit a warning about unused variable.

Bakefile now keeps track of these expressions as well.