Merge branch 'origin/master'
POSIX (Linux) Network Stack

Rewrote the POSIX network stack.  Right now the NetworkImpl::Notifier and NetworkImpl::Notification classes only support epoll -- not kqueue -- so this will only work on Linux systems, not Unixes, but once I get a Unix test environment setup those will be easy enough to write/test.

A few slight changes in the overall interface:

The POSIX network stack returns Promise<bool> objects from Connection::Send rather than SmartPointer<SendHandle>.  SendHandle has been removed completely.  Using a promise rather than some purpose-written class that basically reimplements the idea of a promise is better reuse of code (and makes the interface less confusing -- if a consumer is used to promises, they don't have to look up/learn/remember the interface of a new class).  This will necessitate changes to -- at the very least -- the Client class (which wraps the Send method and passes its return value through in several places).

The Connection::Pending method has been removed.  The Windows implementation made little sense (I'm reasonably sure it didn't return the value it purported), and the method was of dubious value.  At any rate it was implemented in a shared source file -- src/network/connection.cpp -- and the code was NOT portable between the Windows and Linux implementations.  If it's needed/desirous later, it'll be trivial to reimplement for both platforms.

Had to move several methods from shared source to Windows-specific source, since their Windows implementations weren't at all portable to the POSIX implementation.
Client Changes

Removed the client wrapper for the Connection::Pending method since that method no longer exists.

Changed the client over to use promises rather than send handles as the return value from its send-related methods.
Client Cleanup

Cleaned up several left over/introduced pieces of bad code from the client refactoring.
DNS Handler Fixes

Fixed some cross-platform issues preventing dns_handler.cpp from building on Linux:

struct ip_addr appears to be defined differently between Linux and Windows.  On Linux struct ip_addr seems to only contain a single member -- an integer -- whereas on Windows it still contains a single member, but that single member is a union which in turn contains several members.  This caused code attempting to use/convert/correct the endianness of IPv4 addresses to fail to compile on Linux.

libc-ares appears to not use struct ip6_addr at all on Linux, whereas it does on Windows.  This -- from what I found -- is to avoid pulling in system headers and as a legacy support issue -- some older systems' system headers don't define struct ip6_addr at all, but libc-ares is capable of resolving AAAA records even on those platforms.

I adopted a union-based solution to get around these issues: I use decltype to deduce the type -- so it makes no difference whether it's OS-/Berkeley sockets-supplied or a libc-ares drop-in replacement -- and place the objects of that type returned by libc-ares in a union alongside an integer type of equal size -- either UInt128 or UInt32, depending on the address family-in-question -- and a buffer of bytes.  The buffer of bytes is passed to a helper template which corrects the endianness, and then the integers are actually consumed.  This means that at no time do I actually touch the internals of these structures, which prevents a mess of preprocessor macros to adjust the code depending on the platform.
Client Fixes

The POSIX Connection::Shutdown method is not noexcept -- if the socketpair or call to shutdown fails it can throw.  Accordingly the noexcept specifiers on the overloads of Client::Disconnect -- which calls Connection::Disconnect internally -- have been removed.
Server Fixes

The server's panic-related methods were not properly flagged noreturn.  Adding this attribute caused the compiler to reveal that on some code paths some of the panic-related methods actually did return -- not intended at all.  Accordingly this has been fixed so these methods are now guaranteed not to return -- if a user-supplied panic callback happens to return, std::abort is unconditionally invoked.

The Connection::Shutdown method on the POSIX network stack is not noexcept.  Corrected a piece of code in the receive loop to reflect this -- the call to Client::Disconnect is now properly guarded by a try/catch with a call to panic if it happens to throw.
MCPP Makefile Update

Brought the Linux version of mcpp.mk -- the makefile which contains the rule which builds the MCPP shared object -- up-to-date.
Data Provider Makefile Fix

The makefile which contains the rules to build the server's data provider did not automatically create the directory bin/data_providers as needed, and was therefore failing on a clean build.  This has been corrected.
Linux Build Script

Added a BASH script -- build.sh -- which will copy all the Linux makefiles to the root directory and invoke GNU make, passing through all arguments specified on the command line.

This will allow the root directory to be kept clean of makefiles once applied equally to Windows.
Windows Networking Send Handle Removal

Removed the need for/use of the SendHandle class (including removing the class itself) in the Windows network stack, replacing its use with Promise<bool> as in the new Linux/POSIX network stack.
Merge branch 'linux'

Merged the changes made in rewriting the Linux/POSIX network stack as these changes are now fully compatible with the Windows network stack.