Now nqueensGeneric explicitly tracks rows.

This is a preliminary step needed for implementing
optimization based on symmetries.
Now the callback functions are passed in a datatype.
Now the occupied fields are in a separate datatype to facilitate reuse.
Factored out the code that gets a list of openings into a separate function.
Now the openings can be specified to start at a particular column.
Moved the search component of nqueensGeneric to a separate function.
getOpeningsStartingFrom --> getOpenings
Made some tweaks that seem to slightly improve performance.
Now the queens tests print more information about what went wrong.
Now I use an experimental window-narrowing search strategy.
Revert "Now I use an experimental window-narrowing search strategy."

This reverts commit 928a391339cf94abb127d5ad77b08a0d6104771f.

It turns out that my strategy (unsurprisingly) resulted in a
slowdown due to the complexity of the new code.
Now getOpenings uses an unpacked datatype for the position and bit pair.
Made tweaks to n queens code
Made performance enhancements to msumBalancedGreedy.
Moved the MonadStacks data structure into its own module.
Made a clever attempt to narrow the number of columns searched.
Revert "Made a clever attempt to narrow the number of columns searched."

This reverts commit 37c596365475ed25d43bd0cb2867b5a05e6b4c3e.

Not clever enough... the change actually *lowered* performance.
Wrote utility scripts for n-queens.
Implemented symmetry breaking to speed n-queens up by ~ 3x.
Modified n-queens code to directly recurse instead of using callbacks.