The atomic field of an EvalCtxt is only used for debugging.  Remove
it.
Merge commit 'd43660f'
We only ever symbolically execute one state machine at a time, so
there's no point trying to track which machine each store came from.
Make sure we use the specialised address when symbolically executing
loads, rather than the unspecialised one.
Fix a compiler warning.
Try a bit harder to remove all <unreached> state from a cross-product
machine before symbolically executing it.
Tweak the symbolic executor so that it only tracks the assignment
order if there are still Phis present in the machine.
When building a cross product machine it's better to get ``linear''
states out of the way before issuign any bifurcates, because anything
issued after a bifurcate ends up being duplicated unnecessarily.
Bloody stupid hack to make the current test case work without needing
to parse up lots of ELF metadata.
Much better handling of the uninitialised values which can sometimes
creep in.  Basically, we allow the use of uninitialised values
provided it's in the context of a BDD which ensures that the value
never matters.  If the other simpifications can show that a condition
is always true or false then those guards can end up getting removed,
which then indicates that a particular configuration is unreachable.
Make sure that the symbolic executor recognises that and does
something sensible.