Added Food Types and better user factories

Food is now based on Objects with a class hierarchy. The base abstract
food dictates that food should be a GameItem, and should be able to
process being eaten, returning the number of points to add or subtract
from the player. Right now we have regular, which is positive 100
points, and Poison which is -100 points and adds an extra body part.
Also refactored some of the code in Snake into more modular functions,
and utilized the Factories more robustly.