Binrel: separate out details of nwa detensor from binrel.

BinRel.hpp : All functions / definitions for the implementation of detensor via nwa is guraded by macro NWA_DETENSOR.
Also removed implemenation of low level functions in class BinRel for this purpose from BinRel.cpp
Added file nwa_detensor.cpp for implementation of detensor based on nwa

The low level functions in BinRel.cpp for this purpose were moved here.
Add nwa_detensor.cpp to scons source list
binrel tests updated to reflect the new macro NWA_DETENSOR
generate compiler error if NWA_DETENSOR is defined without DETENSOR_MATCHED_PAREN
Allow only boolean variables in BinRel when NWA_DETENSOR is defined

Todo: Fix tests to reflect this constraint.
Relax conditions on NWA_DETENSOR to allow non-booleans in BinRel::creatVars

This was too restrictive, __regSize is of size 3, and I don't know a good way
around this.
Partial implementation of nwa_detensor.

The support functions for the algorithm are in place now.
buddy had to be modified -- added two friend functions to class bdd in order to extract bdd.root for
(1) writing a custom dot output
(2) hashing a bdd object consistently.
Added AddOns/.../binrel/nwa_detensor.cpp and Tests/.../nwa_detensor.cpp

The first file declares support functions written around buddy for nwa_detensor
The second file is the test file for nwa_detensor implementation.
BinRel.cpp: fixed a compiler error region

Use #error to flag compiler error when none from a mandatory set of macros is
defined.
Add calls to setupLevelArray aftern the vocabulary is updated in BddContext

There are various ways the voc can be updated, setupLevelArray is called after
each update so that nwa_detensor can be computed
Complete implementation of obdd to nwa algorithm.

The algorithm is explained in section 5 (as of this writing) in the paper on
speeding up newton.
use detensorViaNwa when NWA_DETENSOR is set when computing BinRel::detensorTranspose
Add test for obddToNwa that corresponds to the example in the paper
Add skeleton of DetensorWeightGen to add weights to the detensor nwa

DetensorWeightGen : public opennwa::WeightGen will be used to attach weights to
the nwa created for detensor under NWA_DETENSOR
Add DetensorWeightGen object in functions to implement detensor via nwa.

When NWA_DETENSOR is declared --
(1) Declare DetensorWeightGen as an incomplete type in BinRel.hpp
(2) Add a DetensorWeightGen object to the function BinRel::addTransitions*
Add code to update DetensorWeightGen object when forming the nwa for detensor

This completes the main implementation of the algorithm.
I haven't yet implemented DetensorWeightGen, so all the setWeight commands do nothing at this point.
Complete Dataflow problem part of the nwa detensor
Fill in DetensorWeightGen
nwa_detensor bug fix. The index into vocLevelArray was computed incorrectly