Fixed bug in Traversal::dryrun()

dryrun() requires that the visit attribute be read/write so that it can
temporarily use set_visit() to set the visit attribute to the
appropriately "dry" version.

I also took the opportunity to change the attribute to be non-required.
Later on in the test for Traversal I will use this, as I will only use
the dryrun() mode, so it makes sense to not have to set a visit CodeRef
at all.
Added 03-traversal.t, which tests Traversal::run()

This test is heavily data driven and has a mini data-structure-y DSL to
help to set up test cases to run. It utilises the dryrun() method of
Traversal, which is a wrapper around the run() method so it does test
the primary behaviour.

Also updated in this commit is dist.ini, because two additional
requirements were added for the new test:

Test::Deep is used for cmp_deeply() and any(), which is useful when
there is a random element to the test output. This is the case for
example when there are multiple valid solutions and one is picked at
random. (Actually it's the hash keys that do it. I've tested this test
on Perl 5.17 to ensure that properly random hash keys work as expected.)

Test::Exception is used to make sure that a cyclical graph causes an
exception to be thrown if we attempt to traverse it.
Updated dist.ini to list myself as co-author.

I figure I wrote enough tests to be counted now.

Still didn't write any of the code though so if something in the
behaviour doesn't make sense Colin is the guy to explain it :-)
Updated Changes and dist.ini for version 0.04.