sched: core: ipm: added Inter-Process Messages.

IPM's are a means to communicate between threads, which might or might
not run on different CPU's. IPM's are there to ensure that chunk of data
safely makes it to the other thread or task.

Implemented:

	* ipm_queue_init : initialise a new IPM queue
	* ipm_post_msg : write a new message to an IPM queue

Signed-off-by: Michel Megens <dev@michelmegens.net>
sched: core: ipm: added ipm_get_msg

ipm_get_msg:
	This function can be used by a thread to receive one or more
	IPM's from another thread. Please note that this function blocks
	untill the it receives a message.

Signed-off-by: Michel Megens <dev@michelmegens.net>
sched: core: ipm: added ipm_reset_queue

ipm_reset_queue:
	The function resets the write/read indexes of the queue. This
	function will only work succesfully if there are no threads waiting
	for a message on the IPM queue head.

schedtest:
	Added a test for IPM messages.

ipm message:
	Changed the type of the data pointer to `const void *'.

Signed-off-by: Michel Megens <dev@michelmegens.net>
sched: core: ipm: added queue length check

ipm_queue_is_full:
	This function is used before posting a new message. If the queue
	turns out to be full, the message will not be posted. A queue
	can be emptied by using ipm_reset_queue.

docs:
	Added doxygen documentation to IPM subsystem.

Signed-off-by: Michel Megens <dev@michelmegens.net>
gpio: atmega: implemented the ATmega GPIO driver

Added an implementation to the ATmega GPIO driver. If the GPIO module is
configured for building, it will be automatically initialised during
boot.

Signed-off-by: Michel Megens <dev@michelmegens.net>
Merge branch 'gpio'

* ATmega GPIO driver
Merge branch 'sched'

* Added IPM (Inter-Process messages) to the scheduling core.

Signed-off-by: Michel Megens <dev@michelmegens.net>

Conflicts:
	usr/tests/schedtest/sched.c