separated out the creation of property and function proxies
added constructor interception