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.
please keep `tap` (or return `name` as the last expression, I'm fine with either). `Minitest::Spec.it` returns the name of the `test_` method that was just defined so I want to keep this behavior. It's also compatible with ruby 2.0 (or 2.1) where both `def foo` and `define_method :foo` are returning `:foo`.