Update kernel executable format

This format is much more flexible, and eliminates the need for a second
KnightOS header. Users can define arbituary header keys to include
custom data, and the kernel has a reserved range for its own data. This
includes the entry point, stack size, etc.