String generator feature

A new strings() method on the FSM object returns a generator which
produces all the strings which the FSM will accept. Each string is
returned in the form of a list of input symbols. When all such strings
have been generated the generator stops, although obviously many FSMs
can generate infinitely many strings, which is why I used a generator
here instead of returning some static list. Python is great for this
kind of thing. Strings are returned in ascending order of length and in
ascending lexicographical order.

A similar strings() method on the "lego" object does the same for lego
pieces (regular expression objects). Here, the returned lists of symbols
are joined together into actual strings. A small conundrum is what to do
if the regex is something like "a.b" which can recognise "acb", "adb",
"aeb" and so on. In this case, supply an "otherchar" argument to use to
stand for all of these many possibilities. E.g.
parse("a.b").strings(otherchar="_") will return "a_b" as one of its
results.

Unrelatedly, a result by Brzozowski (1963) shows that a minimal FSM
equivalent to the original can be obtained by reversing the original
twice. Since I have the reversed() method now, I've replaced the whole
fsm.reduce() method and its attendant gubbins with two reversed() calls,
as well as ripping out some unit tests of the same gubbins.

Resolves issue #4.