CLR interop

Here comes the real .NET stuff.

Basically, the idea is to denote .NET types and namespaces via an `@` before the name, like `@System`, `@System.Console`. Such references are translated to wrapper objects (classes that inherit `CLRWrapper`) that implement `IDynamicMetaObjectProvider` to communicate with the code.

As they are just class instances, they can be assigned to and passed to methods. This mechanism can be used to simulate the C# `using` directive (later to be combined with super-`global` variables) and allows even more flexibility.

Features supported are:
- [x] static property read/write
- [x] static field read/write
- [ ] static method invocation - needs parameter type matching for overloads
- [ ] static indexer read/write (except indexers with only one parameter, which is of type `string`) - needs parameter type matching
- [ ] instantiation
- [ ] any kind of instance access
- [ ] casting (to be written like `@System.Int32(var)`) - needs to be parsed differently