nos: Use pattern rules at compilation stage

This patch enables compiling source files in sub-directories into object
files in that same directory, for example:

   sched/sched.c
   sched/sched.o

Without the -o option to specify the object destination, gcc compiles
the object file into its current working directory, resulting in this:

   sched/sched.c
   sched.o

Now the link stage will fail, since ld will look for the file
sched/sched.o, since the list of object files are obtained as a
patsubset of the source files:

  $(patsubst %.c,%.o,$(SOURCES_C))
paging: Add conditional debugging macros

nos/paging.h contains a PAGING_DEBUG constant which, if defined, enables
the paging_debug() macro function for providing more verbose debugging
output.
Build/nos: compile with -O0
main: remove kmalloc call
scripts/tags: do not be excessively verbose
Build: sanitise Makefiles and make output

This patch overhauls the structure and tidiness of the project
Makefiles, and transforms:

gcc -DDEBUG -I /home/chris/src/nos -pedantic -std=c99 -Wall -Wextra
-Wstrict-prototypes -fno-builtin -fno-stack-protector -O0 -m32
-march=i386 -nostdinc -nostdlib -c -o sched/sched.o sched/sched.c
gcc -DDEBUG -I /home/chris/src/nos -pedantic -std=c99 -Wall -Wextra
-Wstrict-prototypes -fno-builtin -fno-stack-protector -O0 -m32
-march=i386 -nostdinc -nostdlib -c -o string.o string.c
gcc -DDEBUG -I /home/chris/src/nos -pedantic -std=c99 -Wall -Wextra
-Wstrict-prototypes -fno-builtin -fno-stack-protector -O0 -m32
-march=i386 -nostdinc -nostdlib -c -o timer.o timer.c
gcc -DDEBUG -I /home/chris/src/nos -pedantic -std=c99 -Wall -Wextra
-Wstrict-prototypes -fno-builtin -fno-stack-protector -O0 -m32
-march=i386 -nostdinc -nostdlib -c -o tty.o tty.c
ld -melf_i386 -Tlink.ld -o kernel boot.o gdt-flush.o idt-flush.o
interrupt.o sched/process.o fs.o gdt.o idt.o initrd.o isr.o kheap.o
kstream.o main.o ordered-array.o panic.o paging.o port.o sched/sched.o
string.o timer.o tty.o

into:

  CC       port.c
  CC       sched/sched.c
  CC       string.c
  CC       timer.c
  CC       tty.c
  LD       kernel

Executing make with V=1 results in full verbosity output, as normal. Addresses
issue #20:

    #20: Make output is too verbose

    The output of make should be prettified so that it is to read, and so that
    compiler warnings do not get buried among the output.
nos: Separate includes from sources

The nos project tree is restructured so that the majority of headers can
be found in an include/ directory, and its accompanying
sub-directories. For example, the following source layout:

    isr.c
    isr.h
    sched/sched.c
    sched/sched.h

has been transformed into:

    isr.c
    sched/sched.h
    include/isr.h
    include/sched/sched.h

Addresses issue #19.

    #19: Header and source files are not separated

    Source and include files should be located in separate directories,
    with a directory include/ containing sub-directories for
    headers. This means that compilation can be achieved by passing -I
    include/ to gcc.

This patch takes advantage of these changes to also introduce some
higher quality documentation in the project Makefile.
nos: Add multitasking support code

This adds the ability to clone page table entries (PTE) and page directory
entries (PDE). Note that this breaks the boot process.
Match memset() and memcpy() parameter order to stdlib

The idea here is that the order of arguments to the memset() and
memcpy() arguments should be the same as in the standard library, to
avoid confusion. Address issue #16:

  #16: memset and memcpy parameters are out of order

  The order of arguments for the memset() and memcpy() functions do not
  match any standard specifications.
Refactor code style

This patch makes the following amendments to the code style:

  1) Indentation is 8 spaces.

  2) Tab characters are used for alignment.

  3) Vertical column alignment is of secondary importance for most
     situations.

  4) The 80 char width limit is non-negotiable in almost all situations.
paging: Remove unused _test_frame() function

Commented out code is not acceptable.
paging: heap: Superficial refactoring
Multitasking work dump
Move paging.[ch] -> mm/paging.[ch]
Source restructure

The contents of the nos/ sub-directory have been promoted to the base
source tree.