Added the Wavefront Scheduling proper code module.

This module may encompass a very large number of rules or it may just be the
launch point for a large number of modules. Only time will tell
Simplified the extended memory analysis rules by adding more of them

I realized that the rules checking load to store, store to store, and store to
load were a tad complex in that a bunch of data was generated but never
actually used until the third conditional element was evaluated in the network.
The problem with this layout is that it is possible to do partial evaluation
as we are matching. Thus, I created rules that generated unconditional
dependency for the following load and store instructions if the target Load
or Store had an unknown memory dependency. This reduces the total number of
matches for each rule. The flip side is that I have to introduce the parent
basic block and use a multifield match ($? ?t0 $? ?t1 $?) to find the elements
that come after ?t0 that are stores and loads.

For the cases when the memory target was not UNKNOWN I set it up so that it
used the same basic block acquisition method but just checked the MemoryTarget
of the second instruction to check to see if it is the same symbol. This change
seems to make the code significantly simpler (and by proxy somewhat faster).
Simplified the facts asserted in ProducersPropagaion.clp

This should speed up the matching of rules in the network.
Used the modify command instead of a retract-assert combo in MergeRules.clp

I realized that using the modify command allows me to retain the same memory
space while only changing the part that needs to be changed.

I also modified the settify rules to completely settify one of the target
multislots if a single duplicate is found. This should reduce the number of
expensive matches overall.