buffer: cleanup copy() asserts and tests

Buffer parameter asserts were easily simplified by setting falsy non
numeric-ish values possibly less than 0 to 0.

Also copy() tests had a flaw that each buffer had the same bit pattern at
the same offset. So even if the copy failed, the bit-by-bit comparison
would have still been true. This was fixed by filling each buffer with a
unique value before copy operations.
buffer: error and misc cleanup

Changed types of errors thrown to be more indicative of what the error
represents. Also removed a few unnecessary uses of the v8 fully
quantified typename.