Commands Refactor Part 2

We split #196 in two parts. this is the second. (#262 is the first). This builds on all the changes to commands/.
Yep, that's the reason I kept all the IPFS-specific stuff contained in the Context, but I'm not sure exactly how we should do it.  Maybe I should just change it to a `map[string]interface{}`? Anyway, I'm not too worried about making the library vendorable right away since making it work with IPFS is higher priority.