Functional reflection

The cleans up a fair amount of proxy code, switching to a functional approach as below.  This was put together with intent to have sensible Exception propagation, toString, hashCode features.

```
      Function<Invocation, Result> sink = new Function<Invocation, Result>() {
         public Result apply(Invocation e) {
            if ("add".equals(e.getInvokable().getName())) {
               sink(e.getArgs().get(0));
               return Result.success(true);
            }
            return Result.fail(new UnsupportedOperationException());
         }
      };
      Set<String> reallyASink = FunctionalReflection.newProxy(Set.class, sink);
```

when this is merged, the following also needs to be: cc @nacx

https://github.com/jclouds/jclouds-chef/tree/functional-reflection

Note that the overall refactoring and cleanup is progressed, but not complete.  SyncProxy is still very complex, and needs an overhaul, as do pieces of other internal classes.  Also, now that classes named "Proxy" are no longer proxies, rather functions, we can rename them accordingly.