If we are supporting stateful deleters, we need an overload for reset that takes a deleter as well.
void reset(pointer p, deleter_type d);
We probably need two overloads to support move-only deleters, and this sounds uncomfortably like the two constructors I have been ignoring for now...