castToBool mistake

Looks like I forgot to replace this part of code with the castToBool function,
and in fact it does the exact opposite of what it is supposed to do.
fix script_valid tests up to CHECKMULTISIG

Various minor bugs in the interpreter along with tests that check the
script_valid stuff up to OP_CHECKMULTISIG, where things start failing.
fix OP_CHECKMULTISIG error

...and run more script_valid tests, but still some are broken.
pass all script_valid and script_invalid tests

* Fix MAX_SCRIPT_SIZE typo
* Add SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS flag from latest bitcoind
* Add checkSignatureEncoding
* Add checkPubkeyEncoding
* Use len vs. length in script chunks to throw error - turns out that was
indeed an issue after all
* Use all flags in tests
* Other minor fixes and additions

...and for the record, here is some information on what constitutes "hybrid pubkeys":

* http://sourceforge.net/p/bitcoin/mailman/message/29416133/

Test coverage is also significantly improved compared to the last time that I
ran coverage. That is because the step() function of the interpreter is very
large, and went from being poorly tested to well tested. Overall, the
"branches" coverage is now higher, because of course the step() function is one
giant switch/case block.
=============================== Coverage summary ===============================
Statements   : 93.89% ( 3088/3289 )
Branches     : 83.73% ( 1287/1537 )
Functions    : 97.07% ( 365/376 )
Lines        : 93.88% ( 3069/3269 )
================================================================================
use more efficient opcode reference
change opcode interface - get rid of map

It makes more sense to refer to opcodes by Opcode.OP_XXX than
Opcode.map.OP_XXX. I've also replaced reverseMap with the more convenient str,
i.e. Opcode.str[Opcode.OP_RETURN] = "OP_RETURN".