Fixed a simple bug: I had forgot to create a case for 'castToCoreType'
for the instance of 'Dao.Interpreter.Complex' for converting a value of
complex types to complex types (the identity conversion). All arithmetic
operators negotiate the result type to one of the two types of it's two
parameter arguments and convert both parameters to the negotiated type,
which means one or both parameters will always use the identity type
conversion, and this happens when evaluating every infix operator. Since
the complex data type did not provide an identity operator, all complex
arithmetic was failing on the identity conversion. This has now been
fixed.

I also added two more test programs: "tests/dict.dao" for testing
dictionary operations, and "tests/6.dao" for testing all the various
infix and prefix arithmetic operators with all the different types that
can be used with them. So far, I haven't created too many test cases
though but I will.
Bug fix: dictionary initializer expressions were not being evaluated
properly. Assignment expressions within the initializer were treating
the right-hand side as local variables, which were updating local
variables that had been defined outside of the dictionary. By adding a
new function 'Dao.Stack.stackUpdateTop' which is the non-monadic version
of the previously defined 'Dao.Stack.stackUpdateTopM', and modifying the
instance of 'Dao.Interpreter.InitExpr' for the
'Dao.Interpreter.Executable' monad, assignment expressions within a
"dict" initializer now always define variables within the dictionary
object and never outside of the dictionary object.
Fixed the pretty printer for the 'Dao.Interpreter.Complex' data type.