implement the on-screen keyboard with limited features

This PR will close #31 and #181.

![screenshot from 2013-07-30 23 03 09](https://f.cloud.github.com/assets/751535/879777/96a08302-f92e-11e2-869f-26c4265d377f.png)