added more to API
basically done with API other than allocator and hash function passing
(which aren't really necessary). All the functions need testing