String: Add StringPart cast operator, add ToLower()/ToUpper()

Also add test cases for the new functionality.
DataBasedTest[Parser]: Print test case's line numbers on error
StringOperations: Add tests for combos with J (E/U/L)

This actually reveals some incompatibilities between jam and Boost.Jam.
Add support for Jam's broken join with subscript behavior

When the end subscript is less than the number of elements in the list,
the join results in an empty list. Obviously a bug in Jam and Boost.Jam.
Support Jam's join + to-upper/lower behavior

Apparently Boost.Jam performs the to-upper/lower operation after the
join, which results in the join parameter being affected by it as well.
Jam however joins after performing the to-upper/lower operation, thus
inserting the join parameter as specified. Ham does now stick to Jam's
behavior by default, still supporting Boost.Jam's behavior, though.
Add StringPathOperationsSubscripts

Several test cases combining string, path operations and subscripts.
Leaf::_ParseSubscripts(): Fix comment
DataBasedTestParser: Add "#!inputIsCode" directive

It can be specified in the code section and declares the input sections
code blocks instead of an input parameter per line. The input section
will be considered a single parameter (as if enclosed in "#!{ ... #!}").
Add variable_expansion/Recursion test file

It defines a bunch of test cases for recursive variable expansion.