Use correct start value if size holder has not been initialized

Components that contain only themselves are counted as of size 1, not 0.
This also makes so that size calculation is managed correctly and the
find() behaves in O(logn) as it is supposed to.
Do not set to 0 the size of the last item on resize, the edge case will be taken care of in union()
Do not resize if asked size if less than the current size
Arrays in ruby will return nil by default on any out of range index
Use the ! marker to signal that resize will change the underlying data structure
Explain what's the purpose of max_buffer_size