Added the 'Dao.Random.resetDepthLim' and 'Dao.Random.scramble' functions
to help with designing random object generators that produce a more
varied set of objects but without completely sacrificing the non-random,
rotating property of the 'Dao.Random.randChoice' function.
Changed the Makefile so that more of the GHC compiler flags set on the
command line are set in the "ghc-build-opts.mk" file instead.
Removed 'Dao.Random.resetDepthLimit' because it turned out to be a
horrible idea. I found that the depth value was going into negative
numbers for reasons I never bothered to try and figure out. There should
be a different way to have variable sub-limits, perhaps by lifting the
'Dao.Random.RandT' monad into a state monad transformer where there is a
separate state keeping track of other depth measurements.
Instantiated 'Dao.Token.Location' into the 'Dao.PPrint.PPrintable'
class. Pretty printed 'Dao.Token.Location's look like a function call to
construct a location, so it may be a good idea in the near future to add
a built-in function that does construct 'Dao.Token.Location' data types
in the Dao runtime.
Forgot to add SafeSemaphore, which is used by the test suite.
Found new bug: the precedence of the (!) operator in the Dao language parser is
incorrect, it is of a lower precedence than the (&&) (||). It must have a
higher precedence than these operators, but a lower precedence than the (==),
(!=), (>=), (<=), (>), and (<) opreators. The unit tests I have written in this
commit will test the precedence.
MAJOR BUG FIX!!!

This was a NON-TRIVIAL modification to the reference model of the Dao
interpreter that set me back three weeks. The previous reference model
did not allow for assigning to reference indices, so programming a
statement like:

    a[1] = 0;

was impossible . In fact, this feature is still broken, but now the
reference model at least allows for it to work. The actual fix involved
completely re-defining the 'Dao.Interpreter.Reference' object and the
related abstract syntax tree. I also created a new
'Dao.Interpreter.RefReducible' class as a counterpart to
'Dao.Interpreter.Executable', the difference is that
'Dao.Interpreter.RefReducible' always evaluates to a
'Dao.Interpreter.Reference', rather than completely executing it. So the
'Dao.Interpreter.Reference' data type now serves as kind of a thunk
object which can delay execution by the 'Dao.Interprter.execute'
function.

This modification not only allows for reference expressions to be used
to update the values they point to, they can also be used as a kind of
partial function-application. Partial application could become a feature
of the Dao programming language sometime in the future. It may also be
possible in the future to make tuples a built-in type, and write a tuple
of references on the left-hand side of an assignment expression.