Enum type added for adhering to observer/observable design pattern,
added snoop/add/get methods to CPUs to allow for retreiving data from
each other and parallel CPU cohesion. Moved index and tag calculations
into the CPU class (calculations still within simulator class for
testing purposes).