Refactor node text extraction into a separate class
Prettify code a little.

* extract link validation logic into LinkValidator class
* use the same #call interface for all single-method classes
* replace do-end chained blocks with { } ones