Add missing legalities
Refactor kernel to be more testable

Don't start the server right away when we create an instance of the
kernel, export `start` and `stop` functions to do that instead.
Add basic kernel boot test