Centralizing touch handling

Touch bugs abound.  Adding a shared touch state machine to resolve the
issue.