Rearranged and made a listener class. Added support for abbreviations.

Big commit. I moved the listener into their own class, made a few of the methods static that weren't before.
I also added support for abbreviations. If the player types "thin" and the only item beginning with thin is "thinglass", then the sign will give thinglass. However, if there is more than one match, for instance, if the player type "boots", the sign is invalid.