Split utils

Largely, this PR splits up the monolithic `lib/index` into discrete files which can be required on their own. This, because I see them as being useful on their own, and there is really no reason to necessitate requiring the entire module when you need only a quarter of it. Also, I find it makes the code easier to read (and hopefully maintain), but that's just my opinion. There are some smaller changes included as well, which may or may not be to your liking. 

Unfortunately, for some reason, `jsdoc2md` didn't want to play along with me and thus the documentation is _not_ up to date.