NO-JIRA: Fix core dumps and memory management errors in  python binding, engine.py.

Tests were dumping core, valgrind showed pointers being used after deleted.

Fix strategy in engine.py:

Always delete a pointer attribute after freeing it. Any attempt to use a freed
pointer is an error, by deleting the attribute we detect the error faster and
with a python trace rather than later on as a core dump in C code.

Found and fixed bug in Endpoint.release, was using deleted pointer.
NO-JIRA: proton.Url fill in  defaults by default.

Constructing a proton.Url will call self.defaults() to fill in any missing parts
of the url with defaults. This is almost always what you want and means that
users don't have to call url.defaults() manually.

The old behavior is still available by constructing the Url with defaults=False,
in case this is ever useful.  In that case we parse the URL string but leave any
missing fields as None. The str of the URL reflects the original, incomplete
string.
PROTON-772: Remove all direct printing to stdout and stderr.

Added a simple log facility in log.h.
Former printfs to stderr, stout now use pn_logf().
Output is enabled by setting envionment variable PN_TRACE_LOG=ON or
by calling: pn_log_init(); pn_log_enable(true);
Default is output to stderr, can provide replacement log function via pn_log_logger()
Initial set of engine examples along with supporting additions to the library.
Use logging instead of print statements
grab the GIL for incref/decref
added pn_record_has
perform decrefs last
use proper comparison
updated python bindings to use a simpler and more robust wrapping strategy
check for error on send