Enhance: extend/improve LUA access to and editing of room user data.

Modifies searchRoom() & clearRoomUserData, corrects typo in
setRoomUserData(), adds getRoomUserDataKeys() & getAllRoomUserData().

searchRoom( searchString ) was case insensitive and matched on sub-strings of
roomname, extended with two optional boolean arguments to force match 1) to
be case sensitive and 2) to match the entire room name string.

There was no way for the user to inspect the room user data, prior knowledge
of the keys used was required to recall the specific values:
getRoomUserDataKeys( roomId ) returns a number index (starting from 1!)
of the sorted keys used for that room; getAllRoomUserData( roomId ) returns
an associative table of all key-value pairs for the room.

There were typos in getRoomUserData(), these are corrected here.

There was not a way to REMOVE a key-value pair from the room user data,
though it was possible to empty out the value by setting it to an empty
string this does not remove it; also, although it might have been possible
to work around by clearing ALL the data and reentering the other
key-values this required a knowledge of all the OTHER keys in order to
capture their values - which was not then possible to obtain.
clearRoomUserData() now takes an optional second argument a string
representing the specific key to remove from the user data.  This must be
a case sensitive, exact match.  In all cases where data could have been
erased clearRoomUserData() now returns a boolean indicating whether any
data was actually deleted.  For safety, this command will only now erase
ALL the user data for the room if it is supplied only with ONE argument.

N.B. It is possible to add a data item to the room with an EMPTY string
as the key - clearRoomUserData() will respect that but this may not be
a desirable condition to allow.

Signed-off-by: Stephen Lyons <slysven@virginmedia.com>