build: Enable strict kernel compiler warnings

These extra warnings help enforce good programming practises as well as
performing an early bug-catching patch. The restrictive warnings on
stack usage and object size have been imposed with very strict values,
which are largely arbitrary and subject to change.
include: Define common preprocessor keywords

This includes keywords such as 'asm' and 'inline' and other
compiler-dependent functions, such as using diagnostic pragmas and
branch prediction.
Disable known warnings with diagnostics

This enables a clean build without warnings.
arch/x86: Add a ports header

This defines operations and values for ports on the x86 architecture.
lib: Add string.h and function implementations.

This adds fairly standard implementations for string.h, which offers a
number of string operations.
build: Only assign ARCH if not already set

This allows users to specify the build architecture at the command line,
without having to edit the Makefile. For example:

	$ make ARCH=foo all # Builds for 'foo' architecture
	$ make ARCH=bar all # Builds for 'bar' architecture
	$ make all # Builds for default architecture in Makefile
emulation/bochs: Add a 'bochs' build target

This defines a bochs target which automates the process of building,
preparing and booting the euclid kernel under bochs.
Documentation: Document the emulation tools
build: Fail if target architecture is invalid

This causes the build process to quit if the specified target
architecture is invalid (i.e., there is no arch/<arch>/ directory for
it). Example use:

	$ make ARCH=foo
	scripts/Makefile.kernel:83: *** target architecture 'foo' does \
		not exist. Stop
Move keywords.h -> lib/macros.h

The name 'macros' is a more suitably descriptive name for a header than
keywords, and helps identify its purpose.
lib: Add standard definitions header

This adds a stddef.h header file which includes standard definitions for
use throughout the kernel, moving the size_t type declaration out of
types.h and into a more appropriate correct location.
lib/macros.h: Fix GNUC version check

This fixes an incorrect checking of the GNUC version whereby versions
greater than 4.0 would also require a minor version greater than or
equal to six, so a version of 5.0 would incorrectly test as being older
than version 4.6.
lib/macros.h: Guard branch prediction with version no

This improves the guarding around the likely() and unlikely() branch
prediction optimisations by also checking that the available GCC version
supports the __builtin_expect function, and that the build has
optimisations enabled.
lib/macros.h: Stringy macros in __stringify

This allows __stringify() to be called with either a string literal or a
macro.
lib/macros.h: Enable optimisations for non-booleans

This enables branch prediction optimisations for non-boolean expressions
by forcing the results into numerical 1 or 0 values.
lib/macros.h: Add further utility macros
Move is_digit() macro into lib/macros.h
Don't indent preprocessor directives

All preprocessor directives consist of `#' immediately followed by the
name of the directive, with whitespace padding added as necessary to
make the code readable. This transforms:

	#ifdef FOO
	# define MY_MACRO
	# define ANOTHER_MACRO
	#endif /* FOO */

into:

	#ifdef FOO

	#define MY_MACRO
	#define ANOTHER_MACRO

	#endif /* FOO */
build: make 'tags|TAGS' non-silent
lib/assert: Add an assertion header and implementation

This is only a very partial implementation, and will remain that way
while there is no infrastructure for kernel panics or stderr printing.