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/Lib/opcode.py b/Lib/opcode.py
index cfde5f8..15f92a7 100644
--- a/Lib/opcode.py
+++ b/Lib/opcode.py
@@ -49,6 +49,8 @@
 def_op('DUP_TOP', 4)
 def_op('ROT_FOUR', 5)
 
+def_op('NOP', 9)
+
 def_op('UNARY_POSITIVE', 10)
 def_op('UNARY_NEGATIVE', 11)
 def_op('UNARY_NOT', 12)