Added new virtual start, select, and cancel keys

Updated Input implementations to use a struct for key states.
Added Icon class (GUI component)

This icon differs from Guichan's implementation in that it lets you use
a subrectangle.