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