libosmo-trx/client: make public API operate on parsed messages
The TRXC client engine and the TRX endpoint module did not compose: osmo_trx_ep_rx_ctrl_msg() delivers a parsed struct osmo_trxc_msg, while osmo_trxc_client_rx() accepts a raw datagram only; likewise, the tx_msg call-back used to emit a serialized string, while osmo_trx_ep_send_ctrl_msg() takes the parsed structure. An osmo_trx_ep user would have to needlessly re-parse and re-serialize TRXC messages when gluing both modules together.
Make struct osmo_trxc_msg the currency at both module boundaries:
* add osmo_trxc_client_rx_msg(), accepting a parsed message; osmo_trxc_client_rx() becomes a parse-first convenience wrapper for applications managing the TRXC socket themselves; * change the tx_msg call-back to take a parsed message: it's now up to the transport to serialize it (osmo_trx_ep users simply call osmo_trx_ep_send_ctrl_msg(), others osmo_trxc_msg_build()).
This is a preparation for porting trxcon to libosmo-trx.