curve_codec was not properly handling errors

* Did not catch decrypt errors on HELLO, so failed later, when decoding messages
* Now properly catches errors immediately so server can kill bad clients
Improved error handling in curve_server

* When client is invalid or using wrong keys, it's deleted
* Added test case for this
curve_server instance now puts metadata correctly into each codec
Added metadata support

* Proper encoding and decoding of arbitrary metadata
* Split curve_client/server API over two sockets to separate control and data
* Invalid client test case terminates and frees all memory properly
Added ZAP authentication

* tested in curve_codec