Macros for creating typedefs

Following new macros were introduced:

* typedef_maybe(struct_name, typedef_name, type)
* only_typedef_maybe(typedef_name, type)
* typedef_maybe_of(type)
* typedef_maybe_ptr_of(type)
Refactoring: carving out __nothing_t

In some cases it might make sense to define nothing value differently,
e.g. different size on some platforms, etc. This refactoring will enable
us to do so by providing alternative definitions of __nothing_t for such
cases.