fix the 'Cannot get systemRoot' exception we get when testing on Xcode5

We used to use DTiPhoneSimulatorSystemRoot to fetch the absolute path
to the SDK root.  That's fine, except it throws an exception when a
specific SDK version can't be found.

Instead, let's form the path ourselves - it never seems to change
anyway.

When running under test, it's OK that we pretend to use SDKs that don't
really exist on the system so long as the test uses FakeTaskManager to
intercept/fake the call to otest-query.
Quote paths that may contain spaces

If the path to your XCode installation contains spaces, that path
must be quoted or the shell will split it. This change fixes a
few unquoted paths.
Merge pull request #160 from mcannizz/master

Quote paths that may contain spaces
force i386 when running `otest` for iOS logic tests.

As of the Xcode 5 GM, `otest` for the iPhoneSimulator SDK became
a universal binary.

The problem with that is that 1) Xcode doesn't yet build iPhoneSimulator
binaries as x86_64 - they're all still i386; and 2) otest-shim + friends
are still i386 only.

For now, we can just force i386 and things will keep working.  At
somepoint Apple is going to start building simulator binaries as x86_64
and we'll have to make otest-shim + otest-query universal.

We'll probably also have to do what Xcode does when testing universal
binaries - i.e. runs tests twice, once as i386 and once as x86_64.
if xctool is interrupted, its child processes should die.

Let's create all tasks using this `CreateTaskInSameProcessGroup()`
function.  This will give us an NSTask that's configured to NOT start a
new process group for every spawned task.  (The default is to spawn all
children in new process groups.)

This way, if we spawn a long running build (for instance), it won't keep
running if someone does ctrl-c on xctool.
Save all exceptions raised in a test

By default SenTestRun will log every exception raised, not just the
first one. otest-shim will now send all exceptions to the reporters.
Note that often only the first exception is useful, so the reporters
continue to only display the first exception.
Split concept of test failures versus test errors

In the current version of xctool there is no separation of tests that
fail (an assertion fails) versus tests with errors (a non-assert
exception is thrown). This change splits non-passing tests into the two
catagories.

Note that since we now keep track of the number of passes manually
rather than rely on [SenTestRun testCaseCount] the total number of tests
reported will be the number of tests actually run, not the number of
tests configured. It could be argued that the test error count should
also include the number of tests configered but not run, but for now it
doesn't do that.
Collapse test suites into a single suite

Multiple levels have test suites is of questionable value and creates a
headache in xctool. For example, when running tests in parallel the test
suite is emitted for each grouping of tests, even if they're within the
same suite.

This change will only emit the first test suite seen, ignoring any
others.
Move Reporters classes to Common

In a followup commit OCUnitCrashFilter will become a reporter so it can
receive all of the events that a reporter receives. To do this we need
to move the Reporters code to Common.
This commit changes the list to an NSArray and removes the 'All' keyword.

OCUnitTestRunner will soon require the entire list of tests to be passed
into its constructor. This will allow it to emit failures for all
remaining tests.
Add support for emitting results for all tests, even after a crash

Previously if a test suite/test case crashed we wouldn't get any output
for remaining tests. This change will instead emit test results for ALL
tests, even those that didn't get a chance to run. If a test didn't run
then we consider it a failure and label it with a message stating so.

To implement this, OCUnitCrashFilter was changed to implement the
reporter class so it can listen to all events that the reporters are
getting. With the help of the new OC*State classes it will keep track of
what the state of the test run is. If the test suite crashes for any
reason then OCUnitCrashFilter will take over emitting results that the
otest-shim would have emitted.