[SPARK-4893] Add test fixture for resetting system properties after individual test runs

Several of our tests call System.setProperty (or test code which implicitly sets system properties) and don't always reset/clear the modified properties, which can create ordering dependencies between tests and cause hard-to-diagnose failures.

To address this, this PR introduces a `ResetSystemProperties` ScalaTest mixin class which uses `withFixture` to snapshot the system properties before individual tests and to automatically restore them on test completion / failure.

I've updated the Spark core test suites to use this and found several instances where we didn't properly clean up properties.  I'd like to apply similar fixes to the other subprojects, too; I can't directly use the `ResetSystemProperties` class from Spark Core because it needs to be in a test JAR in order to compile against ScalaTest, and we don't have the build configured so that subprojects can depend on core's tests.
Note to self: I should probably add a comment here explaining the ordering concerns between ResetSystemProperties and other traits that implement `withFixture`.  For example, if you're also using BeforeAndAfterEach to modify properties, then you should order the mixins like `with ResetSystemProperties with BeforeAndAfterEach` so that this mixin can do the final cleanup.