Quick and dirty metamethod support.

* These metamethods also allow operator overloading from userland code, either on a per-object basis or prototype-based.
* String values can now be indexed with an integer to return the character at that position, shorthand for String.prototype.charAt()
* Add two new value prototypes.

__missingMethod__ and __call__ metamethods are still TBD.
Merge branch 'master' into experimental
Reworking metamethods and a few other things.

* Removed string indexers.
* All metamethods are now handled in MondValue and are only valid on objects.
* Add new String prototype.
* Metamethods are registered to an object via the setMetamethod function in the object prototype.
* Renaming some metamethods, adding new ones, and removing the shift metas due to technical restrictions.
* Fix formatting.
* Add new example to demonstrate metamethods.
* Update hightlight example to include new operators.
Merge branch 'master' into experimental
Merge branch 'master' into experimental
Completely rework metamethods again.

Metamethods now only need to be defined in either the object itself or in its prototype.
Upon creation in the VM, each object is handed a MondState which is used to dispatch metamethods.
The result being a mostly transparent implementation in the C# code, and less boilerplate in the Mond code.

* New metamethod semantics is to prefix two underscores to the operation.
* Replaced example to illustrate the new implementation.
* Add new __serialize metamethod.
Touching up metamethods.

* Renamed the __exp meta to __pow.
* Added workaround for C#'s type restriction on shift operator overloads to expose __lshift and __rshift to Mond userland.
* Attaching a MondState instance to an Object is now done via a set-once, write-only propery.
Tweak __get and __set metamethods.

__get and __get have been moved to the bottom of their respective indexer in order to keep in line with the philosophy that metamethods are only a fallback.
This also removes a performance concern, as __get and __set would previously be triggered any time the MondValue indexer was accessed for an object value.
Also has the side-effect of disallowing the use of __get and __set on any non-object prototypes to prevent circumventing of type checking in C# code.
Fix __get/__set completely breaking objects.
Fix performance conern on __set that last commit undid.
Merge branch 'experimental'