After much fruitful discussion and evolution, this proposal is now a series of "Bitcoin Improvement Proposals" -- see BIP 11, 12 and 13: https://en.bitcoin.it/wiki/Bitcoin_Improvement_Proposals
Sincere thanks to everybody who contributed improvements, ideas and code.
I don't like these scripts.
For the 1-of-3 case, if I do "sig 3", the only reason why it fails is because 3 is not true. It seems problematic that we are not actually checking anything if you pass in an invalid number and the only reason why it fails is because you will never end up with a 1 on the top of the stack when it's done due to a side effect of our scripts. That just seems like a bad idea.