Optimize warning() opcode

Add a max_warnings_per_thread attribute which makes the warning opcode cheaper by skipping all processing after warning has been called a certain number of times (regardless of the warning to be printed).
When this option is 0, the warning opcodes can be optimized away completely resulting in the fastest possible performance.

(sorry about white space changes)