Refactor selection into individual Selector classes

Each class is now responsible for taking a document node and returning the
values it matches against. This has allowed me to remove the ugly
SerialisbleHelpers module and to reduce the main logic down to a few simple
statements.