check for valid options in validate method

This change prevents a certain class of user error which results when
mistakenly using the `validate` class method instead of the `validates`
class method.

Only apply when all arguments are symbols, because some validations use
the `validate` method and pass in additional options, namely the
`LenghValidator` via the `ActiveMode::Validations::validates_with`
method.
Merge pull request #16210 from sonnym/assert_valid_keys_in_validate

Check for valid options in validate method
pass the test reporter by reference

this prevents the array from being dumped as a DRbObject so we can
reduce communication with the server.  the reporter should always exist
on the server side, so we don't have to worry about GC
fix thread safety issues

this test case had a race condition where it could download data
multiple times.  We'll download the data once at class load.
don't log errors when all is fine