Improved the bytecode optimizer.
* Can now test for basic blocks.
* Optimize inverted comparisions.
* Optimize unary_not followed by a conditional jump.
* Added a new opcode, NOP, to keep code size constant.
* Applied NOP to previous transformations where appropriate.

Note, the NOP would not be necessary if other functions were
added to re-target jump addresses and update the co_lnotab mapping.
That would yield slightly faster and cleaner bytecode at the
expense of optimizer simplicity and of keeping it decoupled
from the line-numbering structure.
diff --git a/Misc/NEWS b/Misc/NEWS
index 05f9ac6..2897793 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -294,6 +294,13 @@
   value, but according to PEP 237 it really needs to be 1 now.  This
   will be backported to Python 2.2.3 a well.  (SF #660455)
 
+- Added several bytecode optimizations.  Provides speed-ups to
+  inverted in/is tests, inverted jumps, while 1 loops, and jumps to
+  unconditional jumps.
+
+- Added a new opcode, NOP, which is used in some of the bytecode
+  transformations.
+
 - int(s, base) sometimes sign-folds hex and oct constants; it only
   does this when base is 0 and s.strip() starts with a '0'.  When the
   sign is actually folded, as in int("0xffffffff", 0) on a 32-bit