isisd: fix crash on "no router isis" (BZ#536)

The crash is due to threads accessing data that gets destroyed
during the removal of the configuration.

* isis_circuit.c: Destroy adjacencies to stop adjacency expiry thread.
  Stop PSNP threads.
* isisd.c: Change state of circuit back to INIT and reassign the
  circuit structure to isis->init_circ_list rather than destroying
  the circuit data structure. Stop SPF threads. Stop LSP generation
  threads.
* isisd.h: Add pointers to LSP threads into area structure in order to
  stop them in isisd.c
* isis_lsp.c: Store pointer to LSP thread in area structure.
* isis_pdu.c: Stop PDU generation for a circuit with a removed area.
* isis_pfpacket.c: Stop processing received PDUs for a circuit with a
  removed area.
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index 50289db..e12e4ca 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -1640,7 +1640,7 @@
       if (diff < MIN_LSP_GEN_INTERVAL)
 	{
 	  area->lsp_regenerate_pending[0] = 1;
-	  thread_add_timer (master, lsp_l1_regenerate, area,
+	  area->t_lsp_l1_regenerate=thread_add_timer (master, lsp_l1_regenerate, area,
 			    MIN_LSP_GEN_INTERVAL - diff);
 	  goto L2;
 	}
@@ -1663,7 +1663,7 @@
       if (diff < MIN_LSP_GEN_INTERVAL)
 	{
 	  area->lsp_regenerate_pending[1] = 1;
-	  thread_add_timer (master, lsp_l2_regenerate, area,
+	  area->t_lsp_l2_regenerate=thread_add_timer (master, lsp_l2_regenerate, area,
 			    MIN_LSP_GEN_INTERVAL - diff);
 	  return ISIS_OK;
 	}