Implement disconnects and wills

Not totally sure how I want disconnect to work. Does it invalidate the
connection entirely?