Rewrote usages of error suppression operator (3.1 version)

See https://github.com/silverstripe/silverstripe-framework/pull/2924 for details.

I had to tweak this PR for 3.1 due to some extra classes and variances between the APIs.

I decided in the end that it wasn't critical to remove all of these from the test cases, since they aren't really run in the normal course of execution, although it would be wise to try avoiding their usage in the future.