Ipns name resolution

This branch is not yet complete, but before i move forward, the name resolution code (in namesys) needs some critiquing. There are also a decent number of bugfixes in this branch that i ran into while trying to get the code to a point where i could test ipns.
We may want to use a handler/interceptor pattern here. The master resolver holds a list of resolvers that implement the same interface. They respond with a boolean value indicating whether they were able to resolve the name.

This allows each handler/resolver to decide whether it can resolve the route. In this proposed framework, the master chooses the order of precedence with "routing" as the last (default).
eg.
``` go
for _, handler := range mr.handlers() {
  str, err := handler.Resolve(name)
  if err != nil {
    continue
  }
  return str, nil
}
return nil, errors.New("No handler could resolve this name")
```

The master behavior's behavior can be tested independently of the handlers. The handlers just need to adhere to the contract.