replace using function instead of pattern

You can pass a function to Grasp with the 'replaceFunc' property
or by passing a function to grasp.replace. The function's signature is:
(getRaw::(Node -> String), node::Node, query::(String -> [Node]), named::Object) -> String`
getRaw gets the raw string code of a node
node is the matched node
query queries the node with the same query engine you used to match it
named contains any named matches, only relevant to use with equery currently
The returned string replaces the code of the matched node.

closes #22