Added elements to the CstVec for Array processing.
Use the Array primaries when fixing domains.
Use CstStage everywhere.

This way we get the flexibility of solving constraints in an order different from the order in which the stages are listed.
Reorganized the solve function by factoring out solveStage.
Some more refactoring in the constraint solver.
lengthVar now keeps a reference to loopVar.

This is required for kicking of loop unrolling when the length variable gets resolved by the constraint solver.
Added unroll functionality to CstVecExpr and CstBddExpr.
Array values are now getting constrained and randomized.

But we need to reflect these randomized values back to the actual array elements.
Fixed parsing of foreach constraints blocks.
Fixed a constraint parsing issue.
Fixed an issue where multiple CstVecLoopVar were being instanciated for
a given CstVecRandArr.
Constraint failed when a constraint started with a literal.
Some refactoring in rand.d
Renamed struct bdd as BDD. Also added structs BDD and Bdd.
Some more refactoring of the BDD.
Fixed a random distribution bug in BDD.
Used == in place of 'is' for integer comparison.
Use emplace by default for buddy instantiation.

Also purged all the opOpAssign operators on BDD. This is done to move
towards making refcounting only for bdd and not for all BDD instances.
Added virtual randomize (user has to use mixin).
Merge pull request #4 from puneet/master

Fixes to randomization.