libubus: refactor ubus_context msgbuf data to be dynamically allocated
ubus: increase message size limit and make it configurable at build-time
libubus: add logic to reduce msgbuf data size after 16 small messages
libubus: fix writev_retry() function when writing large packets

Seems this bug stayed hidden for a while, because the write/sendmsg function
can send up to ~200k in one send, so it looked at first why there was
some data mismatch.
ubusd: replace ubusd_msg_unshare() with ubus_msg_new() to prevent invalid free-ing

The realloc is problematic mostly with large packets, as the pointer changes
so what eventually gets free'd is invalid.
Note that ub ptr param in the  call will be passed on to a ubus_msg_free(),
right after ubus_msg_ref() finishes.

This bug stayed hidden the same way as the bug in libubus writev_retry().
Since the write/sendmsg function can send about ~200k the ubus_msg_enqueue()
call does not get triggered.
libubus: fix ubus_invoke() to return err in case ubus_start_request() fails

Seems the UBUS_MAX_MSGLEN is ignored by ubus_invoke(),
and then segfault happens.

This issue is present before this set of patches.
ubus: add count test to validate large message sizes

Client creates a string "1 2 3 ... 10000 ...", sends it to the server
along with the maximum number in the string.

Server creates another string like the client sent.

It validates it and, returns strcmp()'s result.

This is loop-ed every 2 seconds.
libubus: move ubus_msghdr_data to libubus-internal.h

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
libubus: use explicit type name in ubus_msghdr_data instead of typeof()

Signed-off-by: Felix Fietkau <nbd@openwrt.org>