Thanks for the PR - this looks really good! The code is very neat and I love the addition of the requires_effect/effect_restricts options. Also, thanks for the detailed PR description, it makes it much easier to review.
I've played around with it and the game works nicely - I have no suggestions from a gameplay perspective.
I've commented on a few minor points, let me know your thoughts :)