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