Merge pull request #152 from jemc/redundant_destroy

Problem: Commit e3826de introduced rendundant destroy in codec test
Problem: mixing commands and messages is clumsy

This is an anti-pattern, as we have synchronous commands and async
message flows on a single actor pipe. It's OK for actors that do
their work in the background. For actors that do heavy message I/O
to the application, it's bad.

Several problems: you get message data mixed in with replies for
commands; you are punished for using pretty printable text in
high volume message flows (or you have to switch to binary for
everything, which is also nasty).

Solution: adopt the Cheap & Nasty pattern from the Guide, split
the flows into two, and use two separate sockets. We already did
this in Zyre some time ago. zsys now provides zsys_create_pipe
which makes this easy.

Specifically: before creating the client actor, create a second
pipe, and pass the backend of that to the actor as its argument.

For naming, I'm using "cmdpipe" and "msgpipe" consistently now.
Merge pull request #153 from hintjens/master

Problem: mixing commands and messages is clumsy
Problem: Hard to check message type without destroying it

Solution: Implement is_class function to check signature and id.

In more details, if I can receive the same way various different
messages, I need to branch based on the message type so I can properly
reply. Easiest way would be to try decoding message, but that will
destroy the message, so implementing is_class function, that checks for
valid signature and message id without destroying the message.
Merge pull request #154 from miska/master

Problem: Hard to check message type without destroying it