properly handle nested methods

Previously nested method support ended at the first nested method,
since call would clear out the internally stored method_name. Instead
this approach creates a class returned from getattr, and properly
handles nested method calls. As a bonus it also denies access to private
methods as well. The tests are a bit contrived, but still valid