Merge latest development branch

--HG--
branch : feature/rules
Rename rules.lua to rule.lua to match solution.lua and project.lua

--HG--
branch : feature/rules
Add boolean field kind

--HG--
branch : feature/rules
Add external…() version to all container creation calls

--HG--
branch : feature/rules
Clean up rule container creation and usage

- Adds externalRule() to match rule()
- Adds externalProject() as replacement for external() for consistency with rules
- Adds rules() to associate rules (external or generated) with a project
- Drops customRules(); use rules() on the project level instead

--HG--
branch : feature/rules
Replace customVar() and customList() with per-rule property setters.

Example:
rule "MyCustomRule"
   -- (definition of rule)

project "MyProject"
   myCustomRuleVars {
      MyStringProperty = "Value",
      MyListProperty = { "Value", "Value" }
   }

--HG--
branch : feature/rules
A couple of small fixes for rule generation

- Properly convert properties like "XYZ" to xyzVars() for the setter function
- Early out of detokenizer for non-string values

--HG--
branch : feature/rules
Fix detoken of table values, broken by previous commit

--HG--
branch : feature/rules
Enum rule properties should use enum key rather than value

--HG--
branch : feature/rules
Sort properties in generated projects, to prevent reordering by Visual Studio

--HG--
branch : feature/rules
Fixes for Visual Studio rule generation

- Fix setting of boolean values to false
- Don't consider rules that haven't been explicitly included in a project

--HG--
branch : feature/rules
Merge with latest development

--HG--
branch : feature/rules
Allow for some path information in values to filename()

Not complete, should split out the path and add to location(), but at least absorbs leading "../" sequences

--HG--
branch : feature/rules
Merge new custom rule file support
Support both upper- and lowercase first letter for rule variable setters

For a rule named "MyRule", can now use myRuleVars() or MyRuleVars()
Add new call includeExternal()

Works like include(), but any containers created by the included scripts (projects, solutions, rules) will be marked as external.