Fixing issue 154

This request fixes https://github.com/swig/swig/issues/154

Implemented idea:
For every class: if base class has metamethod __X, create a proxy metamethod with same name __X in our metatable.
proxy metamethod - when called it traverse hierarchy and search for any non-proxy implementation of __X. When it is found, proxy calls it.

Tested:
operator_overload.cpptest
cpp_basic.cpptest

Questions:
1. I have changed cpp_basic.cpptest sligtly. May be those changes should go to some other test file.

Remaining issues:
1. Optimization issue mentioned in the code
2. Still checking whether bug exists with --squash-bases option