Added Enemy Spawning

-Made it so that enemies can be spawned in a level
-Enemies will randomly spawn within a set time frame
-Enemies spawn quicker at higher levels
-Each enemy that can spawn has a spawn chance
Refactored Projectile and Enemy

-Projectile and Enemy are now abstract base classes
-No more "as" cast when checking for enemy weakness, as WeaponWeakness is now a global property available to all LevelObjects
  -In turn, this allows us to set weaknesses to other types of objects like Projectiles
-Projectiles now get added to the Level's "Enemies" list, which enables them to be destroyed by clicking on them

-Overall much cleaner, manageable code that also is slightly faster performance-wise
Merge branch 'EnemyProjectileRefactoring' into EnemySpawning
Merge branch 'EnemySpawning'