Smart casting products to typed interfaces, returning null if properties don't exist or have the wrong types. Task #30
Implemented property get/set as well as component rename by setting the Name property on the interface.
#31
Added test to ensure proxy reuse. #32
Automatically proxy elements and collections.
Refactored proxy behaviors for easier maintainability into a pipeline.
Task #33