Modified sym data type

sym used to be an alias for string; it's now an abstract datatype. It
current implementation uses string under the covers, but switching to a
richer, more efficient symbol type is going to be easy and won't affect
the rest of the system.
Added environment definition, types and symbol tables.