Prototype-based objects


Usage:


Create an object/class:
  object/class = prototype {value, ...; field = value ...}
  An object's metatable is itself.
  In the initialiser, unnamed values are assigned to the fields
  given by _init (assuming the default _clone).
  Private fields and methods start with "_"


Access an object field: object.field
Call an object method: object:method (...)
Call a class method: Class.method (object, ...)


Add a field: object.field = x
Add a method: function object:method (...) ... end


Root object