Return 0 for bad scripts from sigops code instead of an error.

matches how bitcoind behaves.
Make count sigops always count up to the point of parse failure.

We do this by allowing the parser to return the list of parsed objects
(it is an internal only api anyway) and then we use this in the sigops
counting and ignore the error. This change due to bitcoind
compatability.
Perform pushed length checks at exec time, not parse.

To match bitcoind behaviour. Fix tests to agree with this direction.