Script: Honor size limits, handle reserved words correctly, support PayToScriptHash

Down to one failing test now

```text
> runTests [testValid]
Canonical Valid Script Test Cases:

         Test Cases    Total        
 Passed  434           434          
 Failed  0             0            
 Total   434           434          
*** Exception: ExitSuccess
*Network.Haskoin.Script.Tests


> runTests [testInvalid]
Canonical Valid Script Test Cases:
  sig: [2147483647 DUP ADD]  pubKey: [4294967294 NUMEQUAL]  
  label: NUMEQUAL must be in numeric range: [Failed]
 eval error:  none

         Test Cases    Total        
 Passed  291           291          
 Failed  1             1            
 Total   292           292          
*** Exception: ExitFailure 1
*Network.Haskoin.Script.Tests
> 
```