Ensure that all C++ toolkits are tested for a platform

Previously we were ignoring C++ toolkits that weren't available, meaning that a CI build could pass without any C++ tests running.
Now we're executing the C++ tests for all toolkits defined for a platform.
I expect this to fail for the windows agent where C++ toolkits aren't installed. Will also fail for unknown OS

- CppTestExecution is always enabled for toolkit on platform
- Added TestExecution.assertCanExecute() to allow a build to gracefully fail when toolkit not available
- Only run TestExecution.before()/after() when the tests will actually get executed (not for initialization failures)