Code clean-up: I got rid of the 'Dao.Interpreter.RefReducible' class and
updated anything that made use of it. It really was completely
unnecessary, and lazy coding on my behalf for even putting it in. The
reason I wrote it was because there were situations where I wanted an
expression to evaluate to an 'Dao.Interpreter.Object', and some
situations where I wanted it to evaluate to a
'Dao.Interpreter.Reference' to an 'Dao.Interpreter.Object', and I wanted
to do so without inspecting the expression using case statements and
have a separate function for evaluating to each of a reference or an
object solved the problem.

But being simply by being careful to never dereference any expression
that evaluates to a 'Dao.Interpreter.Reference' until it is necessary to
do so is actually much simpler than having two separate classes and
instantiating some of the expression data types into both classes. So I
eliminated that code.

So I changed the 'Dao.Interpreter.AST.ReferenceExpr' instance of the
'Dao.Interpreter.execute' function making it evaluate to a
'Dao.Interpreter.Reference' value. I then modified the instance for the
'Dao.Interpreter.AST_ScriptExpr' for the 'Dao.Interpreter.execute'
function such that 'Dao.Interpreter.AST.EvalObject' constructor is sure
to dereference any 'Reference' values that may have been created by
evaluation of the 'Dao.Interpreter.AST.EvalExpr' which might be function
calls with side effects.

This has not only solved a few bugs that I had discovered a few days
ago, but has simplified the code. Everything is running smother now.
Split the tokenizer functions off of the "Dao.Interpreter.Parser" module
and into their own "Dao.Interpreter.Tokenizer" module. This will allow
the "Dao.Interpreter" to make use of the tokenizer. Since the
"Dao.Interpreter.Parser" module depends on the "Dao.Interpreter" module,
prior to this change it was not possible for "Dao.Interpreter" to make
use of the tokenizer because it would have created a circular module
dependency graph.