Add a new concept: watermark to SmartBuffer.

A watermark is a position at which the data is stored.
When a SmartBuffer instance is reused, the internal buffer
size may be larger than the requered. In that case,
the previous version of SmartBuffer cannot tell users
the position at which data is stored.