Change STATIC_MEM in IntraGraph to INTRAGRAPH_SHARED_MEM. It no longer uses static variables.

IntraGraph earlier used static variables so that different IntraGraph objects could share memory buffers. Added a struct IntraGraph::SharedMemBuf to encapsulate these variables. An object of this type can be passed to IntraGraph constructor, and it will then use the object if the macro INTRAGRAPH_SHARED_MEM is defined. This behaviour is the same as before except for the renaming of the macro. Changes
(1) Renamed macro STATIC_MEM to INTRAGRAPH_SHARED_MEM
(2) Eliminated some static variables in IntraGraph.
Made sem_elem_t IntraGraph::se a non static variable.

There was no need for it to be static. It was overwritten by the IntraGraph
constructor anyway, which is really weird.
Removed IntraGraph::cleanUp. There are no more static variables in IntraGraph
Make RegExp re-entrant, step 1: Created RegExpDag class to enclose static variables. RegExp.cpp compiles

Warning: Build fails. I've only fixed references to RegExpDag members in RegExp.cpp so far.
Remove RegExp::cleanUp. There are no more static variables in RegExp.
Make RegExp re-entrant: step 2. IntraGraph compiles.
Make RegExp re-entrant: step 3. InterGraph compiles.
Make RegExp re-entrant: step 4. SummaryGraph compiles
Fwpds API change: FWPDS::topDownEval is no longer a static function. Invoke it on an object to control just that pds.
Make RegExp re-entrant: step 5 (last step). Everything compiles. Testing next.
Bug fix in FWPDS: topDownEval must be called when createing InterGraph
Add functions to RegExpDag to print diagnostic information about the RegExp dag.

RegExpDag::countLeaves to count the number of leaves
RegExpDag::getHeight to get the height of the dag
RegExpDag::markSpline/countSpline to count the number of nodes on the spline
RegExpDag::countFrontier to count to the number of nodes on the frontier

RegExpDag::printStructuralInformation prints all this information.
Bug Fix RegExp re-entrant effort: changed calls to earstwhile static methods when PPP_DBG is defined
Bug fix in RegExp::star(...). With REGEXP_CACHING new constants were returned while old exist.

If star() is given zero/one as the argument, return reg_exp_one instead of
creating a new one.
Bug fix in RegExp::combine. The assumption that combine(a,a) = a is incorrect.

We don't want to assume that the semiring is idempotent.
Bug fix RegExp::combine(std::list<reg_exp_t>&). Use the default RegExp::combine to implement this.

This was implemented independently and did not have the REGEXP_CACHING code
implemented at all.
Update RegExpDag::roots correctly in many places (commit 1/3): Spread around RegExpDag functions.

roots was not being updated correctly in many places that were not tested in my
runs.
Should be more stable after these commits.
update RegExp::roots correctly (commit 2,3/3). Encapsulate minimize_height and compress

We want to update roots only once per call to these functions.
(1) Add private _minimize_height(...) and _compress to do the real work. public
minimize_height and compress are wrappers that update roots before returning.
(2) Made compressCombine and compressExtend private -- they are never used
outside anyway.
Rename RegExpDag::roots --> rootsInSatProcess. Introduce rootsAccrossSatProcesses

rootsInSatProcess are reset between SatProcesses. We want to store roots
accross calls to RegExpDag::stopSatProcess() RegExpDat::startSatProcess(). We
do that in rootsAccrossSatProcesses. These roots are used for diagnostic
purposes.
Add RegExpDag::sanitizeRootsAccrossSatProcesses. They may contain some non-roots. This function can be called optionally to clean.

If this function is not called, some diagnostic information reported may be
incorrect. It will not affect the actual computations.