I think I fixed the menu screens from often flickering on and off.   I turned off the keypress repeat in the menu routine then put in a while loop to prevent the menu from closing unless ESC or SPACE was pressed.  Also, set up variables to control keypress repeat delay and interval
added buff class and buff_component to fighter class.  first implementation didn't work since I wasn't properly attaching the buffs list in fighter to be owned by the fighter object.  thus, when I gave the player a buff, ALL the enemies got the same buff.  it's working now.
commit also contains a few minor edits/cleanups and new constants in data to define defaults on the buff duration and decay rate.  NOTE that these variables (like the speed and regen variables) are based on ticks, not player/monster turns
ensured that hp is never higher than max_hp in the main object-update loop. refactored give_items() code to give one copy of all items. will have to tweak when we have more items (drop excess on the ground).  Added padding to the edge of the map so that the scrolling is always consistent.
had to break out 'use_crystal' into a different function for each crystal color.  added orange crystal to increase speed.
added Caster class. theoretically works, but need to refactor the scroll spells to make them generic so player and enemies can use them, along with the scrolls
Tweaked data.py to set MAX_ROOMS to keep a consistent ratio with the size of the map. Not sure how that will work long term.  edits to entities.py to pass the 'user' to the 'use items' functions and the 'cast_xxx' functions.  Need to variablize the inventories for all entities