modify walk to handle dicts and list instead of all __iter__ ables;

Here is a thing Dave/Luke need to give some input on as well. The current solution is different from Luke's in a subtle way.

Earlier, in recursive_encoding the transformation occurred on the reference to the dict that had been passed in. Now, the transformation is of the dict. This means recursive_encoding changes by value not by reference (one has to pardon loose and ambiguous use of terms here because python passes by value but in case for dict the value is the reference). To unambiguously see what I mean notice the changes in the test_object.py included in the commit.

The solution isn't doing something incorrect, but a change is a change in behavior and in this case it happens due to the way walk behaves.

Our tests in coi-services and pyon and Luke's tests pass though, and I don't expect a problem.