Notes:
- the OpCodes enum was not complete, all integers in range 1--75 are also valid push opcodes. So I had to either change the return type for Script.get_ops to int instead of OpCodes, or else cast all integers to OpCodes and vice-versa (when the code also represents a length). I chose the second solution, which is more correct, which requires making the OpCodes enum complete.
- dynamically patching the Address instance with _addr2str_cache in Address.__new__ cannot be support by mypy. So I've added an __init__ method to properly initialize this parameter.