Unshelve --pick was broken, because we deleted the whole patch, even when only part of it was unshelved. So now if we unshelve part of a patch, the patch is replaced with a new patch that has just the unshelved parts. That's a long way of saying it does what you'd expect.
Implementing this required changing HunkSelector to return both the selected, and unselected hunks (ie. patches to shelve, and patches to keep).