add `search` and `replace` funcs in grasp as lib

closes #3
`grasp.search(selector, input)` returns a list of matched nodes
`grasp.replace(selector, replacement, input)` returns the changed text
both functions are curried, and will return a partially applied function if called with less than full arguments