fix leak in the GL tile renderer

delete the buffer before we generate a new one, for buffer size increase
optimization: make tile renderer only call glBufferData once

it was previously calling glBufferSubData once per each tile, which of
course has a lot of state change overhead.

(also use STREAM_DRAW hint for the buffer)