Reworked to use std::allocator<unsigned char> instead of a custom allocator scheme (was debating myself for a bit)