mds: fix client purge crash
mds: fix client purge crash

set_state moves the session to the per-session lists; do
this _before_ remove_session (which removes the session
entirely).  Otherwise we fail an assert when deleting
the session:

mds/SessionMap.h: In function 'virtual Session::~Session()':
mds/SessionMap.h:141: FAILED assert(!session_list_item.is_on_xlist())
 1: ./cmds(_Z18__ceph_assert_failPKcS0_iS0_+0x36) [0x97fc87]
 2: ./cmds(_ZN7SessionD0Ev+0x47) [0x73d817]
 3: ./cmds(_ZN16RefCountedObject3putEv+0xdb) [0x712c3b]
 4: ./cmds(_ZN10ConnectionD0Ev+0x3a) [0x713f88]
 5: ./cmds(_ZN10Connection3putEv+0x3d) [0x71294b]
 6: ./cmds(_ZN15SimpleMessenger4PipeD1Ev+0x7f) [0x7130e1]
 7: ./cmds(_ZN15SimpleMessenger6reaperEv+0x228) [0x7048ba]
 8: ./cmds(_ZN15SimpleMessenger4waitEv+0x28) [0x7059dc]
 9: ./cmds(main+0x305) [0x6f9345]
 10: /lib/libc.so.6(__libc_start_main+0xe6) [0x7f2091e715c6]
 11: ./cmds [0x6f8e39]
 NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to interpret this.

ajnelson/ceph,ajnelson/ceph,ajnelson/ceph,ajnelson/ceph,ajnelson/ceph,ajnelson/ceph