Make client api like participant. Add one-time callback option for InternalParticiant. Minor cleanup. refs #13 refs #28 refs #9