Fleshing out run function
Split merge pattern matchers out into standalone trait, so they can actually be created now
Fleshed out key and started implementing run function