Adding (Insert or update if key exists) option to .to_sql #14553
This PR adds SQL `upsert` functionality to the `to_sql` method. As outlined in the issue [discussion](https://github.com/pandas-dev/pandas/issues/14553#issuecomment-536743090), there will be 2 types of upsert:

1. `upsert_delete` - prioritizes new data from incoming dataframe.  Deletes clashing records in the database and then inserts new dataframe.
2. `upsert_ignore` - prioritizes what is already in the database, over what is coming in from the new dataframe.  Deletes records which already exist, from existing dataframe before inserting the rest into the db.

Both upserts currently only check for **primary key** duplicates.

Please note 1 important change over the design proposal made in #14553 - `upsert_delete` and `upsert_ignore` have now been made options for the `if_exists` arg, rather than the `method` argument.  This was revised, because on second consideration, `upsert` was deemed mutually exclusive to `append` and `replace`, but not to the `method` argument, so making it part of `if_exists` seemed the more sound design.  
 
- [ ] closes #14553 
- [ ] tests added / passed
- [ ] passes `black pandas`
- [ ] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry