Add support for insertAfter and insertBefore

This addresses issue [#608](https://github.com/cheeriojs/cheerio/issues/608) and adds support for the `insertAfter` and `insertBefore` methods, as well as unit tests and documentation.

The one potentially controversial change is adding a reference to the original "root" object in the cheerio instance prototype. This is to address the loss of scope/root access that occurs when a new object is created; i.e. an object returned by `$('<li class="grape">Grape</li>')` has no internal way of referencing that original $ root, and thus executing a selector against it (e.g. `$('<li class="grape">Grape</li>').insertAfter('.foo')`). I was attempting to make no changes outside of manipulation.js, but this proved to be impossible AFAIK.  Happy to change if there's a better way.
Let's remove the unnecessary (re)assignment by returning the result of the expression on line 161.