Implement Xfa::Intersect; mostly works I think

The problems I know about are that

1) It's a bit sensitive to what you do with OTHER variables.
   What I mean by this is that if in XFA A you are using
   v1, v2, v3 to track the data state and in XFA B you are
   using w1, w2, and w3, then the transformers in XFA A
   should also constrain [w1' = w1 and w2' = w2 and w3' = w3].

   In practice, I think this may just mean to not use
   voc.True(), which will leave the other variables unconstrained.

   I plan on putting a check on this when adding a transition
   to an XFA, but it's not there yet. I am not quite sure how
   to do it.

2) Epsilon transitions aren't handled correctly.
                             eps
   -> (o)  intersect  -> o ------> (o)

   produces  -> o     (o), which accepts nothing.

   This is because WFA::intersect does not take epsilon closure.
   I don't want to fix the current version because soon I'll be
   rewriting it anyway.
"Wrote" new implementation of intersect

Currently untested and even uncalled
Add initial and final states in WFA::intersect_worklist

Still no epsilon closure, but the original didn't either, so nyah
Add a new WFA eclose test for unreachable states

I expected this to fail, but... it didn't? I don't know why.
Add to XFA a function to return the backing WFA
Add new WFA::intersect test: epsilon transition not at the start
Make WFA::intersect respect non-starting epsilon transitions; ...

Also, XFA::intersect now calls my WFA::intersect version. Together, these
changes make the tests committed in the previous commit pass except
for some epsilon close bug.
Add more tests to try to find eclose problem; give up and change method
WFA::intersect now behaves correctly with epsilon transitions at the front
Optimiziation in WFA::intersect:

When there are no epsilon transitions at the start, just make the
initial state (left.getInitialState(), right.getInitialState())
and don't make a new distinguished start state.
Make a better dummy node in WFA::intersect