Clean up type checking for PlanOut interpreter

The Python PlanOut interpreter has virtually no runtime checking of
required arguments or their values, and also does not give very much
insight into how it should be implemented for strongly typed languages.

This commit is a revamp of how data handled by PlanOut operators gets
verified and used in a type-safe manner.  It gets rid of a bunch of old
validation code that has never been used in practice, and instead
adopts a uniform, type-safe way of extracting parameter arguments.
This implementation more closely matches what we do with the Hack
interpreter.

 - Convenience methods for extracting and checking typed operator
arguments, e.g., self.getArgInt('x') will retreive an argument named
'x'. If 'x' is not given, or 'x' is not an integer, an error will be
thrown. This improves ease of debugging, and also provides a clear path
for those who are implementing the interpreter in strongly typed
language.
-Improved argument checking for built-in operators
- Updated PlanOut editor to print out operator errors, rather than
stack traces.
- Min and max are now required arguments for randomInteger and
randomFloat
 - Deprecated validate() and options() methods
 - Deprecated self.parameters for operators: self.args refers to
arguments passed into an operator. If an object is a subclass of
SimpleOp, then the arguments are pre-evaluated (and act just like
self.parameters).