That's messy - for one thing you're relying on undocumented internals (WorldHandler.getInstance()) and for another, you're breaking thread-safety (key presses will be handled on the Swing/AWT event thread instead of your scenario thread; there will be two threads accessing objects without any proper synchronization between them - the result may be occasional glitches, eg collision checking may break, or you may get exceptions in internal Greenfoot code).
Trust me - you don't want to do that.
I'll look into why tab doesn't work with Greenfoot.isKeyDown(...).
Yeah I'm using it very skeptically at the moment, it doesn't have heavy use at the moment and I'm now keeping the keypress in a boolean (keyPressed sets it to true, then keyReleased sets it to false), this is helping to eliminate the synchronization problems (of which I experienced, which is why I am keeping its state stored).
This code is mostly temporary as well, I know it's bad practice which is why I will replace it with something else once the opportunity comes, for now it's more of a "just in case".
Also thanks for looking into it :D. Don't worry about me, I understand that there are many problems with this, I'd never rely on something "experimental" if you will.