Merge pull request #416 from hintjens/master

Fixed COPYING.LESSER
Extend ZTP/1.0 protocol

The new protocol adds support for protocol version and  exchanges the
socket type, so that the library can reject a connection when the
sockets do not match.

The protocol was designed so that it's possible to detect and fully
support ZTP/1.0 peers.

When a new connection is set up, peers exchange greeting messages. The
greeting message encodes both the protocol verion and the socket type.
The format of the greeting message is as follows:

    greeting    = tag1, adaptation, tag2, version, length, socket_type
    tag1        = BYTE / 0xff
    adaptation  = 8 BYTES
    tag2        = BYTE / 0x7f
    version     = BYTE / 1
    length      = BYTE / 1
    socket_type = BYTE

The protocol does not define the value of adaptation field.

When interoperability with ZTP/1.0 peers is required, the adaptaion
encodes, in network byte order, the length of identity message increased
by 1. When adaptaion consists of eight zeros, the current
implementatatio of 0MQ 2.x closes the connection.

This patch supports both ZTP/1.0 and new protocol.
Decouple encoder_t and decoder_t from session_base_t

This patch introduces i_msg_sink and i_msg_source interfaces. This
allows us to make message encoder and decoder more general.
Make ZMQ interoperate with ZMQ 2.x SUB sockets

Since ZMQ 2.x does not support subscription forwarding, it's not
possible to use ZMQ 2.x SUB socket to receive messages from a PUB
socket.

This patch adds some compatibility layer so that ZMQ 2.x SUB socket
receives messages from PUB socket.
Merge pull request #418 from hurtonm/versioned_ztp

Introduce versioning into ZTP
Remove unused member variable
Remove superfluous statement
Merge pull request #419 from hurtonm/code_cleanup

Code cleanup
Fixing PGM issues

Hopefully fixed LIBZMQ-427 - there was a slight typo in the init_address
refactor. The encoder refactoring had also broken pgm_sender and
receiver, but just required updating to use the new functions.
Merge pull request #420 from ianbarber/master

Fix some PGM refactor breakages
Introduce abstract interface for message encoder/decoder
Implement new message encoder/decoder

This is supposed to become part of the ZMTP/1.1.

The main differences from the ZMTP/1.0 framing protocol are:
- flags field comes first, followed by the length field
- long messages are signaled using a flag rather then 0xff escape
- length field does not include the flags field, 0 is a valid value
Simplify initial handshaking
Merge pull request #421 from hurtonm/master

New message encoder/decoder + code simplification
Add "#undef NDEBUG" to all tests.

This change makes sure that even if the tests are built in a
"release" configuration (with optimizations and NDEBUG turned on),
the assertions won't get compiled out of the tests themselves.

The C standard guarantees that the most recent inclusion of
<assert.h> is the one that counts, so it's important that the
"#undef NDEBUG/#include <assert.h>" come as the last thing in
the block of header files.

"testutil.hpp" includes <assert.h>, so I've left <assert.h> out
of any test that #includes "testutil.hpp", just for the sake of
brevity.
Merge pull request #412 from Quuxplusone/test-release-builds-too

Add "#undef NDEBUG" to all tests.
Merge pull request #422 from hintjens/master

Replaced device concept with proxy concept
Add pthread.h include to test_connect_delay.cpp

This test case uses pthreads, but doesn't include the header.
Merge pull request #423 from jmgao/patch-1

Add pthread.h include to test_connect_delay.cpp
Update doc/zmq_msg_get.txt