Adding io_manager to build.

So far it is empty.
Adding a few more functions to the io_mgr header.
Adding registration/waiting on fds, as well as wait-loop.

Still entirely untested, will add some simple tests soon.
Adding io_manager test.

Still have to fix a small datarace that the client should only
be started after the server (or should retry until the server arrives).
Client in io_mgr test spins until server starts.
Fixing and updating IO manager test/API.

There are now convenience routines that mimic(ish, minus error handling :( ),
the normal read/write functions.
IO manager changes, still have to fix a race condition.

There has to be a protocol between the IO manager and the schedulable task that
registered the file descriptor, to make sure that the IO manager knows when
the task has taken care of the event itself.
Synchronizing IO manager and waiting threads.

Introducing a status field on the schedulable tasks to indicate
their IO needs status. This allows the IO manager thread to know whether
it should try to awaken the schedulable task or not.

IO_STATUS_UNKNOWN: the task is still determining if it needs more data or not
IO_SATISFIED: the task has the data it wants (don't wake it)
IO_UNSATISFIED: the task is (or will very shortly be) waiting
Adding call to join the io_manager to startup.
Trimming io_manager, adding io_manager to sync_data.

The sync data now creates and manages the IO manager's
lifetime.
Adding IO manager support for sockets.
Expanding .gitignore.
Merge branch 'io_manager'