Essentially, this makes it possible to use C++ types like std::function
inside uiBut. This has plenty of benefits, for example this should
help significantly reducing unsafe void * use (since a
std::function can hold arbitrary data while preserving types).
I wanted to use a non-trivially-constructible C++ type (std::function)
inside uiBut. But this would mean we can't use MEM_cnew()
like allocation anymore.
Rather than writing worse code, allow non-trivial construction for
uiBut. Member-initializing all members is annoying since there are so
many, but rather safe than sorry. As we use more C++ types (e.g. convert
callbacks to use std::function), this should become less since they
initialize properly on default construction.
Also use proper C++ inheritance for uiBut subtypes, the old way to
allocate based on size isn't working anymore.