smalloc: length is byte size, not array length

The C++ API has been changed so the passed length is the byte size of
the data, not the length of the array.

This was done so users need to explicitly define how much memory they
want allocated.
smalloc: dispose returns true or false

smalloc.dispose() now returns true if external memory was successfully
free'd, and false otherwise.

In light of this, dispose() will not throw if the passed argument is not
and object, but instead just return false.
smalloc: consistent-ify syntax

Small syntax fixes of variable renaming and argument alignment.