OUT/OOParsing: Allow hashing of mutables anyhow

(otherwise the weakdicts don't work)

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/OOParsing: in EphemeraProductions, initialize data

oops, forgot!

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/Ephemeral: DeepEphemeral real_me property hacks

make a real_me naming-conflict exception for DeepEphemeral
(by name, unfortunately -- no other solution is nearly as easy),
and use it to make the real_me property of DeepEphemerals perform
recursive evaluation of real_me

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/OOParsing: remove deep_real_me references

Now that deep_real_me is no longer needed/available, stop using it

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/OOParsing: Make EphemeronProductions DeepEphemerals

This (mostly) restores the deep ephemerization of EphemeronProductions

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/Ephemeral: automagically resolve metaclass conflicts
OUT/RulesParser: update to exploit automagic metaclass in BooleanNegationProductions

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/RulesParser: Make BooleanProductions EphemeraProductions, not NoopProductions

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/Ephemeral: Add is_ephemeral API to test for ephemerals

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/Ephemeral: whitespace touchup

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/Ephemeral: remove vestigial variable name bug

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/Ephemeral: remove incorrect forward-thinking comment
OUT/Ephemeral: implement built-in transformation notification API

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/Ephemeral: "thermonuclear" registry clearing after transformation

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/OOParsing: use the new notification feature in Ephemer{a,on}Productions
OUT/Ephemeral: conditional inherited calldowns

When calling inherited AdjudicateTransformation and become methods,
test whether the inherited method exists before calling.  Also,
in DeepEphemerals, we must remember to return a result from
Adjudication.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/OOParsing: remove vestigial commented debug code

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/OOParsing: do not continue optimization if an error was raised
OUT/OOParsing: handle transformation

When an ephemeral BaseProduction is transformed, continue optimization
against the new BaseProduction, if the that's what we transformed into.
Otherwise, do nothing and hope the right thing happens.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
OUT/RulesParser: optimize negations of negations

Finally we have the right infrastructure in place to optimize away
negations of NegatableBooleanProductions.  Do so.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>