Supports binding to objects returned from methods and properties.

Also added cache to avoid recreating the binding. Removed propertyMap and methodMap because they can be easily obtained from the type. Remove LowercaseFirst because it won't support objects that have properties differ only in the capitalisation of their first letter.