Add support for Parameterized Tests

The It command now accepts an optional -TestCases parameter, which is a a collection of hashtables (technically, any IDictionary objects).
If provided, instead of executing the test script block once, it will be executed once for each element in the TestCases array, and the
dictionary will be splatted to the test block.  This means the test block must accept parameters for each of the hashtable's keys.

The NUnit XML output function will detect this condition and create a test-suite element of type ParameterizedTest.

Looking ahead to our discussion of plugging in languages, the new Invoke-Test helper function
accepts a script block which is responsible for displaying the test results, instead of being
hard-coded to use Write-PesterResult.  This will allow things like Gherkin to provide their
own output functions without duplication.  We'll need to do more of this type of change
throughout the code later.