Throw InvalidOperationException when DeserializeFromString<Dictionary<string,string>> is passed a list

A key/value mapping is expected, so an InvalidOperationException is
preferred over an IndexOutOfRangeException, which is what is currently
occurring.