REFACTOR: Enhance `FormatString` and `JoinString`

These are so useful, and in every context, that I moved them to the root namespace.

Replaced `string.Join()` calls with `JoinString()` calls.

I also added a bunch more overloads for `JoinString` for completeness.
REFACTOR: Remove duplicate method.

I may need to change the code so this can't happen again. Maybe a table
mapping between terms and functions?
REFACTOR: Make some AstBuilder methods return more-derived types.
FORMATTING: Remove some extranious whitespace.
Issue #82: Allow command arguments to be arrays.

I think this is an oversight in the official language spec, which doesn't
allow:

    Write-Host 1,2      # Should be OK

We tried lots of other options but they all had problems (see issue #82).
Improve `MemberExpressionAst.ToString()`

For debuggability.
Implement `ArrayLiteralAst.ToString()`

For debugability.
Add `[DebuggerStepThrough]` in ast visitor dispatchers

So they don't show up on the callstack & distract us while debugging.
Merge pull request #85 from JayBazuzi/array-literals-as-command-arguments4

Fix #82: Allow arrays as command arguments