smart: add a pkt type for negotiation

This lets us model the have/want lines from the client.
server: handle negotiation lines

A bit of scaffolding for handling the lines from the client telling us
about its commits.