Unit test infrastructure

Chose CppUnit even though it's C++ because it's BSD licensed.
This adds a build requirement for CppUnit.