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.
hashing a pk is going to happen so often it might make sense to just cache it. i.e. these become accessor fields. 

```Go
pubkey := k.GetPublic()
hash := pubkey.Hash()
bytes := pubkey.Bytes()
name := pubkey.Name()  // using "Name" or something as `u.Key(Hash()).Pretty()` 
```