Separate discrete functionality into separate source files

Although each piece is also exposed via the default require,
the building blocks can be useful on their own and shouldn't
necessitate including all of the module.
Update test suite
Merge pull request #1 from nikcorg/split-utils

Split the building blocks into separate source files