Add support for arbitrary Location

This adds support for arbitrary Location values, both positive and negative. ```-n=0``` and ```-n=-1``` behave the same as before (tail from end and tail from start). To keep the code simple, we introduced a little "off by one" (so you actually use N+1 or -(N+1) to seek to the N-th byte from the end or start).

To be closer to the original unix tail, it would be nicer to seek lines, not bytes. But for our application, it's not necessary and a lot slower.

cc @camilo @snormore