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.
I don't like the idea of making nodes mutable. (maybe i'm silly and they already are mutable...) but makes me think that at some point we'll have an invariant that we'll violate. maybe TTRTD is to make two interfaces:

```Go
type Node interface {}
type MutableNode interface {}
```

implemented by the same underlying struct, but safe to use `Node` as properly immutable in other packages. (`MutableNode` could also have a `Commit` after which writes (Update/Link changes) fail. 

(otherwise, i fear a lot of errors are going to creep into this.)