Add some git 'locating' functions

These include things like Prefix() and TopLevel() which return the
current path inside the nearest git repository and the path of the
nearest git repository, respectively.
Refactor SplitRepository() and MakePage() somewhat

This is *mainly* a refactor of SplitRepository(), which is now called
AnalyzePath(). It is still a god function, but makes use of the new git
calls and is somewhat cleaner. MakePage() has been adjusted to the new
values.

It is very important to note that the concept of /tree/ and /blob/ is
now gone. Files and directories are handled sensibly and powerfully.

Close #117