add printing capabilities and better cleanup

- procs now end safely rather than being forced
- this is done through sending an END msg to all procs
- creating an ensemble with is_printing=True will print its origin value