Rename #eval_in_child_context to #context and make public

This will allow use to get the context of this rule more flexibly.
Extract out mapping of children into rules to more generic #define_rules method
Use actual Rule object rather than hash for resolved rules
Add support for pseudo selectors
Tidy up interface for setting pseudo selectors
Update #extend to no longer accept a block

This would get confusing when compared against #when which takes a block
but applies it to a pseudo rule’s context instead