Add an initrd generator

This patch adds an extra build directory 'initrd' to the project, containing the
sources for a program for generating the binary initrd filesystem formats from
local system files.

  Usage: intrd-gen: <image> [<path name> ...]

  Generate an init ramdisk <image> containing a list of files from arguments
  passed as as <path name> couplets, where <path> is the local file path, and
  <name> specifies the name of the file in the initrd. For example:

    $ initrd-gen initrd.img ~/foo foo ~/bar bar

  This generates a file initrd.img which is a ramdisk containing the files ~/foo
  and ~/bar, with the respective filenames 'foo' and 'bar'.

In addition, an accompanying script mkinitrd.sh automates the task of calling
initrdgen for a list of files.

  Usage: mkinitrd.sh

  Generates an initrd file by composing the contents of the input directory into
  a ramdisk image. If an initrd image already exists at that location then a
  backup copy will be made with '.old' appended to the filename.

    Input directory: 'boot/initrd'
    Image:           'boot/initrd.img'

Based on material available in James Molloys kernel development tutorials,
available here:

    http://www.jamesmolloy.co.uk/tutorial_html/
Adds assert and panic header files

This patch adds two new header files, <nos/assert.h> and <nos/panic.h>,
with the intention of offloading some of the work from <nos/util.h> into
a more specific function-orientated header structure.
Add paging out of memory behaviour
Remove 'TODO' tags

TODO notes have been replaced by entries into the GitHub issue tracker.
string: Add strcpy and strcmp implementations

These simple and standard implementations offer little protection
against buffer overruns. The function descriptions are adapted from the
3.43 release of the Linux man-pages project, available at:
    http://www.kernel.org/doc/man-pages/
Add optional debugging to scripts

If scripts are executed with DEBUGGING environment variable set, they will dump
a more verbose output during execution.
Add a KHEAP_END address constant
Reorder paging includes
Improve output from paging kernel panics

Decode information from CR2 and display.
Revert the memset() and memcpy() functions to uint8_t
Bodge major page fault regression

For reasons unknown to me, the kernel became unbootable. The problem was
caused by the creation of the kernel heap. This would cause a page
fault at address KHEAP_START (0xC0000000). By trial-and-error, I found a
value that works, however this is not a suitable solution, and the
regression should be pursued further.
Update Makefile help target
Large build overhaul and initrd implementation

This commit squashes a huge evening hackfest into one large, unwieldy
glob. Amongst the changes made are:

  1)  Complete restructuring of the project tree:
        bochs/       - contains bochs related files
        docs/        - for documentation (TODO)
        floppy/      - binaries and filesystems for inclusion in images
        initrd/      - files for inclusion in init ramdisk
        initrd-gen   - initrd generator application
        nos          - kernel sources
        scripts      - miscellaneous helper scripts

  2)  The addition of new scripts:
        bochs.sh    - run the emulator (renamed from simulate.sh)
        mkfloppy.sh - generate a floppy.img image from floppy/
        mkinitrd.sh - generate an initrd image from initrd/

  3)  The addition of new make targets:
        floppy      - generate bootable image from floppy/
        initrd      - generate initrd image

  4)  Improvements to initrd-gen that allows specifying image, improved
      error checking, reformatted output etc.

  5)  An implementation of the initrd functionality for the kernel,
      allowing boot-time loading of configuration files and data from a
      binary filesystem format. This implements feature request #6.

        #6: Add a file abstraction and file system

  6)  A fix for the page fault regression, issue #17.

        #17: Fix page fault regression

        With the kernel heap starting address set to 0x00600000, the
        kernel panics on boot. This is caused by a page fault caused by
        a call to memset() in kernel heap creation. While 100%
        reproducible, the bug doesn't seem to be predictable and
        attempts to bisect it have failed, with various other bocsh
        erros preventing any diagnosis.

  7)  Multiboot structure definition.

  8)  Fix a missing header #include from <nos/assert.h>.

  9)  Prevent unused-parameter warning in nos/fs.c.

  10) Removal of scripts/todo.sh
Add a mrproper make target
kstream: Add '%c' format option to kstream_vprintf()
string: add missing include header