refactor update/insert query to support additional features

  - added logic to handle corner cases regarding autoIncrement values
  - added support for OUTPUT variables (mssql)
  - added support for identity wrapping (related to point 1)

This may seem rather pointless right now, but I'm trying to make the eventual mssql dialect merge easier by getting small things in the [abstract dialect, main tests, library code] in now so that you just need to review the actual dialect when put up for PR.
I see, yeah adding supports["OUTPUT"] was not something I was really into, I wanted to replace it with supports: { outputValues: true/false }, and use the same logic for both postgres and mssql. Unfortunately, both dialects require the fragment to be placed differently in the query. For now I will add the "&& options.returning" and leave a note to investigate merging the two. deal?