Move tests alongside tested modules

This commit moves our unit tests 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.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