Added basic pagefault support

Granted, I don't currently have a hard-disk driver set up, so all I can do
right now is just map unallocated physical pages into the tables.
Made dynamic memory smarter

Apparently kfree() simply collapsed freed pages into preceding pages
regardless of whether its preceding page was free or not. Now it doesn't.
Added virtual memory allocator

I added a linked-list-based virtual memory allocator.
Make panicking smarter

panic() actually works as intended now.
Build script changes

We now dump a human-readable and sorted list of symbols to a file in the
build directory. Virtualbox apparently doesn't support symbolic debugging
for custom OSes, so it's up to me to resolve them manually.
Add pagefault and vmem allocation testing to main routine