Optimize spreadsheet with large number of rows

As the number of rows increases, appending to the spreadsheet takes
more and more time. So, optimize it to take less time.

In this solution, the first time the sheet is appended to after the
server is running it takes long time, but subsequent appends happen in
a short time as we cache the row index.

This cache needs to be updated each time the server is restarted for
any reason.

TODO: Find proper solution by talking to the gspread authors to figure
out way to reach end of spreadsheet in a fast and efficient manner.