Put simulation cleanup code in a try:finally block.

This means that when networks are killed e.g. due to a Node crashing (or in the GUI's case, a node raising an exception to end the simulation) the network is cleaned up nicely.

(p.s. @tcstewar though not as late as my award winning commit I do feel that committing stuff after the end of summer school party deserves some (sad) kudos...)
That would leave the question of when we send the app stop... I'm becoming more tempted to send it at the start of `run` but that would leave the board in a messy state were you to run a Nengo model followed by a PyNN model.