Adds metamethod support.

Metamethods are designed to be magic methods, fallbacks that are only invoked if there is no other alternative, they do NOT override default behaviour.
Metamethods need only be defined on an object like any other function in order to work, and they are only valid on objects.


The following metamethods are available to Mond userland code:

* __bool
* __add
* __sub
* __mul
* __div
* __mod
* __pow
* __lshift
* __rshift
* __and
* __or
* __xor
* __neg
* __not
* __gt
* __gte
* __lt
* __lte
* __serialize
* __get
* __set
* __eq
* __in
* __string

* Adds a workaround for C#'s type restriction on shift operator overloads to expose these to Mond.
* Adds new example to demonstrate metamethods.
Tweaks to search order in the indexer.

* The set indexer now respects locks.
* The current object is searched before the prototype in both get and set indexers, falling back on the metamethods if necessary.
* New ctor for MondValue to attach a MondState to the underlying Object.
* Fix possible NullReferenceException in Object.cs if TryDispatch was called but it was never given a valid MondState.
Merge pull request #9 from Syke94/metamethods

Adds metamethod support.