Move tests alongside tested modules

This commit moves our unit tests into 'test' packagaes alongside the
modules they are intended to test. This has a number of advantages:

- predictable test locations: the tests for module foo.bar are always at
  foo.test.bar_test
- 1:1 mapping module to test file: this helps enforce the testing of
  isolated units
- easy overview of module coverage: we can quickly and easily identify
  modules that are not tested