Add AbstractItem and AbstractMediaItem, make all models extend their respective AbstractItem