added case sensitivity option to dictionary keys

BASIC identifiers (variables names, etc.) need to be case insensitive so
the dictionary add() was modified to change the key to upper case before
searching the key map, but the actual key string is still stored as is
in the key list (so the key is stored how it is first seen)

the key map in the dictionary class was changed to a hash for faster
look up of keys

since the remark and string constant dictionaries do need to be case
sensitive, a case sensitivity option was added to the add() function

added encoder test 3 (dictionary test) to verify variable names and
numeric constants are case insensitive but remarks and constant strings
are not