Fix cannot select candidate when symbol exists

pgdata->phoneSeq skips all symbols in preedit buffer, while
pgdata->bSymbolArrBrkpt does not skip any symbols. They have different
index system (skip symbol vs. not skip symbol) so we cannot use them
together. To use pgdata->bSymbolArrBrkpt and pgdata->phoneSeq together,
translation is needed in one of them.

Closed #79
Do not use recursive call to free hash item
Do not add userphrase whe auto commit

We does not know if the whole auto commit string is a valid phrase. It
might contain symbol. Also, it causes memory leak due to mismatch
phoneSeq and wordSeq.

Closed #80
Adjust index structure and tools.

Changes:
1. Integrate sort and maketree into init_database.
2. Let freq live in index tree leaves, out of dictionary.
3. Let all fields of TreeType become uint, avoiding negative wrong values
   and maximizing utilization of value range.
Let dict & tree buffers be const.
Remove redundant pho_id in PhraseIntervalType.
Rename variables for parent of phrases.
Integrate char functions into dict.

char.c and char-private.h are removed.
Integrate name of Get*First() & Get*Next().

"vocabulary" contains both "phrase" and "word".
Separate `dict' & `tree' access.

dict.c / tree.c only accesses dict / tree.
Data exchange is through tree_cur_pos & tree_end_pos.
Let TreeType be endian-independent.

Use unsigned char array for bytes of each field. Get/PutUint24 is added
for 24-bit R/W 24-bit R/W support.