I think I found two bugs in the TestKit here:

1) TestProbe.watch() fails if the watched actor is terminated in the moment we try to watch it:
```
java.lang.AssertionError: assertion failed: expected Watch(TestActor[akka://TcpConnectionSpec/user/$$q]), found Watch(TestActor[akka://TcpConnectionSpec/user/$$p])
[info]   at scala.Predef$.assert(Predef.scala:179)
[info]   at akka.testkit.TestKitBase$class.expectMsg_internal(TestKit.scala:295)
[info]   at akka.testkit.TestKitBase$class.expectMsg(TestKit.scala:281)
[info]   at akka.testkit.TestKit.expectMsg(TestKit.scala:641)
[info]   at akka.testkit.TestKitBase$class.watch(TestKit.scala:155)
[info]   at akka.testkit.TestKit.watch(TestKit.scala:641)
```

2) I've witnessed a deadlock in commit jrudolph/akka@5719aa0a67fe170ce2ae2bd4f3fdf5ef53e016ae (maybe when the actor has already died when `TestProbe.watch` is called?)
```
"TcpConnectionSpec-akka.actor.default-dispatcher-3":
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000e101e558> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:842)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1178)
	at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
	at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
	at akka.testkit.CallingThreadDispatcher.runQueue(CallingThreadDispatcher.scala:224)
	at akka.testkit.CallingThreadDispatcher.dispatch(CallingThreadDispatcher.scala:204)
	at akka.actor.dungeon.Dispatch$class.tell(Dispatch.scala:106)
	at akka.actor.ActorCell.tell(ActorCell.scala:306)
	at akka.actor.RepointableActorRef.$bang(RepointableActorRef.scala:154)
	at akka.actor.ActorRef.tell(ActorRef.scala:108)
	at akka.actor.dungeon.DeathWatch$class.sendTerminated$1(DeathWatch.scala:55)
	at akka.actor.dungeon.DeathWatch$$anonfun$tellWatchersWeDied$2.apply(DeathWatch.scala:71)
	at akka.actor.dungeon.DeathWatch$$anonfun$tellWatchersWeDied$2.apply(DeathWatch.scala:71)
	at scala.collection.immutable.RedBlackTree$.foreachKey(RedBlackTree.scala:84)
	at scala.collection.immutable.TreeSet.foreach(TreeSet.scala:151)
	at akka.actor.dungeon.DeathWatch$class.tellWatchersWeDied(DeathWatch.scala:71)
	at akka.actor.ActorCell.tellWatchersWeDied(ActorCell.scala:306)
	at akka.actor.dungeon.FaultHandling$class.finishTerminate(FaultHandling.scala:202)
	at akka.actor.dungeon.FaultHandling$class.terminate(FaultHandling.scala:159)
	at akka.actor.ActorCell.terminate(ActorCell.scala:306)
	at akka.actor.ActorCell.systemInvoke(ActorCell.scala:369)
	at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:256)
	at akka.testkit.CallingThreadDispatcher.runQueue(CallingThreadDispatcher.scala:226)
	at akka.testkit.CallingThreadDispatcher.systemDispatch(CallingThreadDispatcher.scala:184)
	at akka.actor.dungeon.Dispatch$class.restart(Dispatch.scala:91)
	at akka.actor.ActorCell.restart(ActorCell.scala:306)
	at akka.actor.LocalActorRef.restart(ActorRef.scala:355)
	at akka.actor.SupervisorStrategy.restartChild(FaultHandling.scala:310)
	at akka.actor.OneForOneStrategy.processFailure(FaultHandling.scala:386)
	at akka.actor.SupervisorStrategy.handleFailure(FaultHandling.scala:284)
	at akka.actor.dungeon.FaultHandling$class.handleFailure(FaultHandling.scala:248)
	at akka.actor.ActorCell.handleFailure(ActorCell.scala:306)
	at akka.actor.ActorCell.autoReceiveMessage(ActorCell.scala:400)
	at akka.actor.ActorCell.invoke(ActorCell.scala:385)
	at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
	at akka.dispatch.Mailbox.run(Mailbox.scala:212)
	at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:501)
	at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
	at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
	at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
	at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
"pool-2196-thread-2":
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000e21a0da0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:842)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1178)
	at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
	at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
	at akka.testkit.CallingThreadDispatcher.runQueue(CallingThreadDispatcher.scala:224)
	at akka.testkit.CallingThreadDispatcher.systemDispatch(CallingThreadDispatcher.scala:184)
	at akka.actor.dungeon.Dispatch$class.sendSystemMessage(Dispatch.scala:113)
	at akka.actor.ActorCell.sendSystemMessage(ActorCell.scala:306)
	at akka.actor.LocalActorRef.sendSystemMessage(ActorRef.scala:351)
	at akka.actor.dungeon.DeathWatch$$anonfun$watch$1.apply$mcV$sp(DeathWatch.scala:21)
	at akka.actor.dungeon.DeathWatch$$anonfun$watch$1.apply(DeathWatch.scala:20)
	at akka.actor.dungeon.DeathWatch$$anonfun$watch$1.apply(DeathWatch.scala:20)
	at akka.actor.dungeon.DeathWatch$class.maintainAddressTerminatedSubscription(DeathWatch.scala:159)
	at akka.actor.dungeon.DeathWatch$class.watch(DeathWatch.scala:20)
	at akka.actor.ActorCell.watch(ActorCell.scala:306)
	at akka.testkit.TestActor$$anonfun$receive$1.applyOrElse(TestKit.scala:65)
	at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
	at akka.actor.ActorCell.invoke(ActorCell.scala:386)
	at akka.testkit.CallingThreadDispatcher.runQueue(CallingThreadDispatcher.scala:238)
	at akka.testkit.CallingThreadDispatcher.dispatch(CallingThreadDispatcher.scala:204)
	at akka.actor.dungeon.Dispatch$class.tell(Dispatch.scala:106)
	at akka.actor.ActorCell.tell(ActorCell.scala:306)
	at akka.actor.RepointableActorRef.$bang(RepointableActorRef.scala:154)
	at akka.testkit.TestKitBase$class.watch(TestKit.scala:154)
	at akka.testkit.TestKit.watch(TestKit.scala:641)
	at akka.io.TcpConnectionSpec.assertActorTerminated(TcpConnectionSpec.scala:430)
[...]
```

Do you think those are valid ones? I'll file issues then.