smalloc: initial smart memory allocator

Other classes that require external memory should allocate it though
smalloc. This will simplify creating general performance improvements
and debugging for things like memory leaks.

Inputs are validated from cc so the module is safe for user-land, and
several tests have been added to make sure it operates normally.

External memory allocations have been hooked up to the HeapProfiler so
they can be viewed by modules like heapdump.
buffer: use new allocator

All buffer instances will be constructed in js using Buffer(). Which now
uses the new allocator against its own instance to allocate memory.
slab_allocator: use new Buffer
crypto: convert syntax to use new Buffer
src: final conversion
buffer: inline caused linkage issues
src: remove code for fast buffer constructor
buffer: fix reference to smalloc
buffer: add SlowBuffer

For backwards compatibility added SlowBuffer to process.binding(),
though it should be deprecated.
buffer: missed copy parameter
smalloc: add assert for kMaxLength
buffer: return errors for user facing api's
buffer: add kMaxLength check
buffer: make .slice at like Array
buffer: coerce values like Arrays do
buffer: use passed char* data, don't copy
src: more c++ like
buffer: parse arguments more like DataView

DataView will floor the offset, then check its index.
smalloc: assert should check <=
buffer: coerce values and length == .write

.length will now be coerced for negative and floating point values. Also
.write alters the buffer length since the size of the write can be
different from the size of the buffer.

The later solution is a hack, as it will leave unused memory floating on
the js object. A better solution should be developed.