Introduce casting through NXN_CAST.

The code has a lot of implicit casting of void *.  In C, this is
allowed (e.g., no need to cast return of malloc).  In C++, this
results in a compiler error.  Ideally, I would like the code to be
portable enough to compile under either a C or a C++ compiler.

Since the casting problem is best addressed through macros that do
casting for you, the result is that, since you are now providing
type information, you want to remove all naked uses of sizeof.  Thus,
previously you would have constructs like:

    Foo *foo = nxn_mem_xalloc(sizeof(Foo));
    Foo *array = nxn_mem_xalloc(length * sizeof(Foo));

Now become

    Foo *foo = nxn_mem_xnew(Foo);
    Foo *array = nxn_mem_xnewvector(Foo, length)

The nxn_mem_xnew() and nxn_mem_xnewvector() macros handle both the
casting and the sizeof() operations.

While I hate cowtailing to C++, the enhanced portability and the
cleaner nxn_mem_* constructs seem like a good enough justification.

NOTE: This is just the first step; the project, at the moment,
doesn't compile under C++ just yet.