About the debouncing. I understand what you are saying, but surely, if the object of the device is to detect who presses their key first, then debouncing won't be necessary. In other words, once I detect a keypress, all future keypresses (be they keybounce fake keypresses or not) will be ignored by the device (by my code) until I hit the reset switch for the next question.
If the application itself makes impossible for you to detect multiple presses during the bouncing period, then no, you don't need debouncing. However, it's definitely a good thing to be thinking about as you write your code. A 10ms delay after your button processing won't be perceivable to the user, so it won't cost you anything, but the benefit it adds is that if you change around your code or try to reuse the button portion of your sketch in another sketch, bouncing won't break things.
- Ben