libmn_sockets: enrich libmn_sockets

Add more methods to the libmn_sockets, including connect(),
listen(), bind(), receive_from(), send_to(). libmn_sockets is
now a socket layer in its own right, not requiring an external
library for any IO functionality. Also, update C++ relevant
interfaces.
New python-based build system
pymake: fix double-make race condition

The old dependency resolution algorithm would cause shared
targets to built more than necessary because jobs were dispatched
in parallel. That parallelism wasn't really exploitable since this
computation is done in Python anyway. This new one serializes job
dispatch to avoid races.
Rename make.py to makefile.py
pymake: cache results of CPPincludes()

CPPIncludes() invokes the C compiler which is expensive if you just
want to generate the build dependency graph. This change caches the
results of that to speed it up.

Also grease _create_job() up a bit.
pymake: only remake if dependency is strictly newer

We used to rebuild a target if one of its dependencies were
the same age. This is technically more correct but in practice
causes too many redundant builds because of bad mtime resolution.
Since this tool is geared toward automated rebuilding after programmer
edits, it's fine to only rebuild if strictly newer.
pymake: don't abort() on exception in job worker

abort() is a bit too strong, instead just call _exit()
with a failure exit code.
pymake: add ObjectArchiver() recipe
pymake: record compiler command used in CPPIncludes() cache

Since CPPIncludes() can be generated using differen C(XX)FLAGS
we should record which compiler command we used to know when
to invalidate the cached file.
pymake: allow for runtime dependency generation

Before, dependencies had to be generated when the Target object
was created. For dynamic dependencies this required running impure
functions before Targets could be constructured. This, in turn, made
defining Targets impure and we want to be able to declare Targets in
any context (and in particular at module scope).

This change allows Targets to explicitly rely on functions to generate
dependencies when the dependency resolution is run, allowing us to
define Targets in any context.
makefile: build libmn_sockets examples

Also a little refactor.
libmn_sockets: don't name-hide base class version of bind()
libmn_sockets: remove flags parameter to c++ interface

We don't yet define any flags, so remove flags optional parameter.
libmn_sockets: implement accept()
libmn_sockets/examples: add tcp_echo_server example