Refactors ClientIdInterface::saveKeyToFile

The original saveKeyToFile function didn't take into account the pair
may already exist in the file whether we might be adding a duplicate key
or updating an ID's key.  This should resolve that issue by essentially
rewriting the file each time to saveKeyToFile.

This does add some overhead to the function, but ideally the function
isn't being called often enough to make a noticeable difference.  There
may in fact be a better method but this refactor at least makes it
behave more appropriately.
Refactor ClientIdInterface::getDelimPos

getDelimPos now searches from the end of the string.  This should
be safer as it eliminates any sanitation issues if a client id were
to contain a delim char.  A key is purposely constructed to not contain
any delim characters

A potential optimization could be to simply calculate the end of a
id/key string and subtract the length of a key to end up exactly where
the delimiter should be.  The speed in which the file is rendered
however does not warrant this optimization.
Adds removeClient function

removeClient function is added to ClientIdInterface class
Small changes

Nothing major, small bug prevention and clarification fixes
removeClient also removes from keys dict

Neglected to also update the m_key dictionary when removing a client
from the id/key file.
Adds getters for id/key hash

Also a small const change in getIdLen()