MSVS: Add support for IDL files compilation.
Fix makefile dependencies for BakefileQuotedString grammar.

The sub-grammar emits tokens imported from the Bakefile grammar; this is
implemented by reading Bakefile.tokens content. The makefile ignored
this dependency and so BakefileQuotedString parser & lexer wouldn't be
regenerated when a new AST node was added to Bakefile.g, causing it to
emit nonsense.

Also handle generated .token files by the makefile (cleaning,
dependencies).
Fix wrong file positions produced by enum_possible_values().

Due to variable name shadowing, position was taken from the wrong
expression object. It wasn't completely off, usually just one token
away, but it was still wrong. Fixed by renaming one of the variables.
No real change, remove unused bit of code.
Paths, bools etc. are valid as strings too.

For example, a path may be embedded in a command line string.
Log effective toolsets list.

Don't log the maximum set, log what's really going to be generated after
accounting for -t flags.
Avoid making unnecessary copy of the model.

When generating output for multiple toolsets, we need to make
independent copies of the model that can be then processed in
toolset-specific ways. But we can avoid this (potentially expensive)
copy for one of the toolsets and simply reuse the generic model for it.
Add a tests for paths handling.
Recognize path anchors like @srcdir at grammar level.

Previously, they were parsed when normalizing an untyped LiteralExpr
expression into a PathType, by manually parsing the string. This meant
that an anchored path string could be interpreted as a verbatim string
and not formatted correctly in the output.

Now that the anchors are part of the grammar, any explicit use of an
anchor will make the literal a PathExpr, with all the associated
goodness of  correct validation, formatting etc.
Defer guess_expr_type() into separate pass and improve it.

Instead of doing the guessing at model construction time, when variable
references cannot be safely dereferenced and inspected, do it as part of
the normalization pass.

Also improve the guessing by inspecting referenced variables if
appropriate. In particular, expressions of the form of
$(SOME_PATH)/filename are now correctly recognized as paths.
Fix handling of empty strings in format_string().
Fix CannotDetermineError ctor.

The base class, NonConstError, takes expression, not message, as ctor
argument, so we have to call base classs' ctor directly.
Fix disambiguate_intermediate_file_names() to work with differently-long paths.

zip() only worked with paths of the same length. izip_longest() pads the
sequences with None to the match the longest one in this case, which is
what we want.
Show changes summary in verbose mode.

Also include information about bkl's running time.
Fix error messages related to VSList type.
Don't propagate shared lib's link flags to its users.

While things like dependency libs, link flags etc. of static libraries
should be propagated to the binaries that link against them, this is not
the case for shared libraries, where the library is fully linked binary
in itself.
Fix ConfigurationProxy for linker properties.

ConfigurationProxy works for resolving conditions for a single target.
In some cases, however, values are obtained from multiple targets, e.g.
in NativeLinkedType.get_ldlibs() and others.

Provide a way to explicitly perform the proxying with apply_subst()
call. This is not particularly elegant (in that the code cannot use the
proxy transparently and must be aware of it in some special cases), but
it gets the job done.
Return plain strings from PathExpr.as_py().

Returning a tuple was causing too much trouble everywhere. A
particularly annoying case was that it would break ConcatExpr.as_py()
(which assumes strings). Using a path as part of concatenated expression
(e.g. -I$(includePath)) is a perfectly reasonable thing to do.
Fix correctness bugs in expr.are_equal().

The substitution of placeholder expressions for comparison was too
eager, doing it everywhere. It's only correct to do it if the value
would show in the final expression. It is NOT OK to do it inside
conditionals.