Create Keyboard using KeyboardBuilder

Use KeyboardBuilder to create Keyboards.

KeyboardParams now describes a Keyboard, instead of variables scattered
over many classes. KeyboardBuilder fills in the values in KeyboardParams
as it builds a keyboard.

A key in a keyboard now only correspond to one code, instead of
optionally multiple codes.
Using attribute 'code' instead of 'codes'
Change to using KeyboardBuilder

Change to using KeyboardBuilder and KeyboardKey.

Disabled functionalities: shift key, functional key, styled icons, IME
options.
Added Space as valid row entity

<Space> can now be defined anywhere in a row, just as a key.

With the introduction of spaces, there is now no need for leftGap
specific to rows, i.e. rows always starts at x-coordinate 0.
Include/use ThemedIcons in KeyboardParams

Include and use ThemedIcons in KeyboardParams for e.g. enter and delete
key icons.

Fix invalid keycode being the same as the keycode for shift, and move
the definition to Keyboard, where all other keycodes are defined.
Match Keyboard keycode values with R.values.integers
Cleanup comment
Include EditorInfo in KeyboardParams

Include EditorInfo in KeyboardParams, which can be used to provide
different keys for different input types (e.g. '@' for email, '/' for
URI).
Remove useless class
Implement shift key functionality

Implement shift key functionality: changing the case of qwerty keyboard,
preview, and output keycode. Also changing shift key icon depending on
the shift state of the keyboard.
Cleanup useless variables
Implement keyboard include

Implement keyboard include, so that rows and keys can be included and
merged. Now rows and keys can be specified in different files.
Separate rows in qwerty keyboard into multiple files
Implement symbols keyboard

Implement symbols keyboard in terms of include/merge and multiple files,
as opposed to using modeId.
Remove modeId
Compute hash code only once

Save the computed hash code to prevent unnecessary repeated computation.
Merge branch 'keyboard_builder'

Build keyboards using KeyboardBuilder.