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.
Merge pull request #70 from czchen/feature/again_rwdb_review

New database structure implemented by Bo-cheng Jan
Update test_Tab_at_the_end
Update test_Tab_at_the_end
Add all_phrasing in CallPhrasing and Phrasing
[ci skip] Implement DoDpPhrasing

DoDpPhrasing implements dynamic programming phrasing algorithm. It is
much faster then brute force one. However, due to "tab at the end"
feature, we still need brute force algorithm to get all possible
phrasing result.