Split out everything for easy testability

Updated and created new testing projects.

Created a few test implementations to make it easier to test on machines
that do not have sound devices.