indirect Zones need setModified(true) to update

This is much more efficient, as most of the time we never change what we
are drawing.

KeyboardZone is changed to be indirect and use setModified so it can use
the normally slower but prettier textMode(SHAPE), which setModified lets
us make extremely fast unless the KeyBoardZone's state is changing every
frame, which is extremely unlikely.