run things at startup and report exceptions

- Use `Parallel.ForEach` to run startup tasks
- Only Stop tasks that have been started successfully
- Use `Task.WaitAny` instead of `Task.Wait` so no exception is thrown
- Only `Bus.Shutdown` when starting, not while stopping
Use ManualResetEvents instead of WaitAny for Bus.Shutdown of tasks

- Events used instead of Task.WaitAny to avoid a race condition and
ensure tasks are stopped even when Shutdown is called immediately after
Bus.Start
- ManualResetEvents used instead of AutoResetEvents so Bus.Shutdown
doesn't freeze when called more than once in a row (eg one call due to
exception, another due to closing the service)
- Interlocked.Exchange used so multiple Shutdown calls Stop tasks only
once
Merge branch 'BusStartupExceptions' of https://github.com/chrisbednarski/NServiceBus into release-5.0.0 with a few change.

Added acceptance test.