better metadata tests; switch from JSON to JSON::MaybeXS

Tests hashes more completely, and uses Test::Deep plugins for YAML and JSON rather than decoding ourselves; allows us to switch from JSON to JSON::MaybeXS quite easily.
I do wonder though whether we should be generating META.json using `ascii => 1` -- that is, with all non-ascii characters escaped as `\udead\ubeef`. This would make older toolchains happier, but at the expense of human readability.