lib/macros: Add compile-time message macros

Two macros have been defines which provide the user with the ability to
pass messages at build time:

	__build_message(x)
	__build_warning(x)
Define a DEBUG macro

This generic build-time define can be used to guard the compilation of
tests and assertions which are not required for release builds, but are
useful for testing and debugging purposes.

As the project develops, it may be beneficial to introduce a more fine
grained debug build approach than simply an on/off switch, this could be
implemented by breaking up the debugging flag into smaller
subflags (BOOT_DEBUG, STACK_DEBUG, etc) and enabling those through a
debug level control (DEBUG=0-4, for example).
build: Disable unused-parameter warnings

These are largely unhelpful and clog up the build output with numerous
false positives, or clog up the source code with needless diagnostic
pragmas.
build: Add a compiler warnings list

Keep all of the -W flags in a single location
lib: Add stdarg.h implementation
lib: Add stdio.h and implementation

This adds a standard input/output header with a minimalist
implementation. At the moment, the stdio implementation uses the tty
subsystem directly to write out to video memory, there is no file or
stdout/stderr abstraction.
Implement subsystems interface and infrastructure

This adds a very simple infrastructure for supporting a subsystems
abstraction. A subsystem represents a single component of the operating
system; it does not necessarily directly map to a single device, but
rather a subset of common functionality, for example, a tty device, a
memory manager, process manager etc.
lib/macros: Fix syntax of n_elements macro
s/__OPTIMIZE__/NDEBUG/g

Replace the use of the __OPTIMIZE__ macro for the more explicit NDEBUG.
main: Print 'Hello, World!'