Introduce "stratum" blocks for manually stratified Bloom programs.

This allows the program text to divide rules into strata manually. This seems
like a cleaner approach than the previous "stratum_map" technique, which will
probably be removed shortly.
Code cleanup for poset implementation.

No longer need separate PosetScannerElement.