loop-de-doop
fixed border cases, but generations are not atomic
gather update in [][]cells then update universe
moved print statements to a procedure