Improve MDP filter rules file syntax
Move get_self_executable_path() into "os.h"/os.c
Fix bug in read_symlink(), improve logging
Improve "log.h", make logMessage() inline

Make logMessage() -- wrapper around vlogMessage() -- an inline
function and remove redundant conditional level != LOG_LEVEL_SILENT

Move logString() into log_util.c, refactor so outer loop now iterates
over lines in buffer, rather than over all log outputs

Rename log_backtrace() to logBacktrace() for consistency

Document __NOWHENCE__ value
Improve mdp_recv() error handling

Make all V2 MDP interface calls take a __whence argument

mdp_recv() always sets error before returning -1, does not set
errno=0 otherwise

mdp_recv() does not log errors on EINTR or EAGAIN (EWOULDBLOCK)

mdp_recv() sets errno=EOVERFLOW if local socket name is too long

mdp_recv() sets errno=EBADMSG if malformed or spurious packet
received

Remove redundant mdp_recv() error logging from "mdp ping" and
"config sync" and several "id" commands
Detect abbreviation collisions with multiple identities
Set up SEGV crash handler in main() not server()

Now all commands will attempt to log a GDB backtrace on a crash, not
just the server daemon process.

Added strbuf_append_signal_name()
Allow for more duplicates in 2hop test
Create extensible service discovery protocol, with initial basic implementation
Minor refactoring
Refactoring towards supporting new network simulator
Create new AF_UNIX based network simulator
Use simulator for existing msp tests