Reimplement java backend builtin list

Provides important support for proving several kernelc examples that mention I/O cells.
Today I realize that if I combine these two lists together,  the signature of ```BuiltinList#baseTerms()``` will be inconsistent with other builtin collections. Besides, it requires to change many places in the code base. Therefore, although I have created a new class ```BaseTerm```, I decide not to combine the two lists. Instead, I add a new method ```BaseTerm getBaseTerm(int index)```, which is only used in the ```SymbolicUnifier```.