minitest-metadata performance improvements

This PR improves performance of minitest-metadata metadata processing by up to 50%.  See this gist: https://gist.github.com/tmertens/9a3355c3c9a04d537a34

The two caveats here are:

- It requires any hash metadata to appear at the end of the argument list, but this conforms to standard ruby practices.

- If a hash metadata appears at the end of the metadata argument list, other metadata args will be added to that hash rather than instantiating a new hash.  This change is based on the expectation that metadata is generally applied to each method individually and not to two or more methods using a single stored variable.  This gives an additional 25-30% performance boost to metadata args which include a hash.

I have never seen variables used for metadata hashes in the wild myself, but if this is an issue, the second commit can be easily reverted.
can you double check `if metadata` condition? `*metadata` splat in method arguments will default to `[]`, not `nil` so I think this `if` doesn't have any effect.