Fix obscure bug in rooms

If someone tries to list the rooms in the exact moment it's being deleted and before chatRooms is updated, getRooms will crash. Additionally, a leftover empty room name will crash on construct when the index is still accessible but the data has been deleted, ie. it's saved as "null" if the room data is saved before the garbage collector ultimately destroys the deleted data.
Improve removeChatRoom: use splice isntead of delete

Use splice on the numerical arrays instead of delete to be sure no null is being saved as a room, since JavaScript will leave the null in the middle of the array instead of removing it, causing it to be saved on the file.
Merge remote-tracking branch 'upstream/master'