Add NaryReadInstr<Operator, T>
Consider nested blocks in Recorder::block_condition_ptr()

This implementation can be further optimized by restoring previously
computed block conditions. This can be accomplished through a stack that
is modified at the beginning and end of a block.
Single out error condition in sliced stack benchmark

Delete one Thread::error() such that exactly one bug must be found.
Build logical disjunction of error conditions

By creating the logical disjunction of error conditions, multiple of
them can be checked simultaneously. In turn, however, Mutex requires
the newly added Threads::expect() function that builds an assertion
with the current block condition as antecedent. In addition, it is now
mandatory to call Threads::end_main_thread(Z3&) because it clears the
private list of error conditions. This _cannot_ be done in the usual
Threads::reset() function because error conditions belong to Z3 which
could have been deallocated by the time Threads::reset() is called.

Changes:
* Build logical disjunction in Thread::error()
* Add Threads::expect() to use in Mutex
* Change tests to call Threads::end_main_thread()