Extract shared definitions that reply on an interface

* it turns out that Gem and Package were sharing a twice defined matcher that relies on an interface… thanks to @alindeman for pointing that out.
add User matchers