Adjusted UpsertAsyncInternal to batch inserts

Bulk inserts are now done in batches of 200 bound params, e.g.
when inserting collection of records with 10 fields each, each
batch size will be 20 records.

Note: apparently the limit for prepared statements in
sqlite is 999 bound parameters.
Icorporated feedback on UpsertAsyncInternal

1. Only throw if "extra" columns are detected to have come from the
   server.

2. "batchSize" promoted to a constant: "UpsertBatchSize". This value is
   currently hard-coded at 25.

   Note that this will cause issues if the user attempts to upsert more
   than 25 records of 40+ columns each. This is due to SQLite's hard limit
   on bound parameters of 999 (by default).

3. Moved row code gen logic into helper method "AppendInsertValuesSql"

4. Refactored "Batch" function into "TakeMany" to improve readability and
   eliminate possible multiple enumeration of the input sequence.
Added tests around exceeding SQLite limits

UpsertAsync_CanProcessManyRecordsAtOnce: Inserts a number of records
specifically crafted to exceed SQLite's default parameter limit of 999.

UpsertAsync_Throws_WhenInsertingTooManyLargeRecords: Adds a test for the
edge-case of inserting very large records, which currently fails.
UpsertAsync now calculates batch size dynamically

Fixed tests to reflect the new edge case of any single element having more
than 800 parameters.

Fixed braces.
Merge pull request #336 from deadalusai/issue-sqlite-bulk-insert

Adjusted UpsertAsyncInternal to batch inserts