SgFieldSerializable now supports lists as a value

- SgFieldSerializable was coded for dicts only, updated to support
  list objects.
First pass at adding dry run ability to batch,commit,revive, delete

- All commit functions for SgEntity and SgConnection classes now have
  an arg "sgDryRun" that when specified as True will not push any
  changes to Shotgun but will trigger before and after commit calls.

  All before and after commit callbacks are passed the dry run value.
  This allows commit callbacks to not perform certain tasks, such as
  creating directories, when the commit is only a dry run.

  Dry runs can be executed for debugging and to check if callbacks
  will raise an error.
Fix for field schema info haivng valid_values set as None.

valid_values is now an emtpy list instead of None.
SgFieldID.invalidate() missing arg force

SgFieldID.invalidate() did not contain the "force" arg, added.
SgFieldType.invalidate() missing arg force

SgFieldType.invalidate() did not contain the "force" arg, added.
SgField.invalidate() not clearing hasSyncUpdate when invalid

invalidate was not clearing sync update data if the field was
invalid and had not been updated with a call to validate which
would pull the value from sync data, clear it, and set valid True.
SgFieldSerializable isinstance typo

Fixed erro in isinstance checks that did not create a tupe but instead
ended up passing items as multiple args.
SgEntity.removeField() incorrectly checking if field is user field

removeField was failing if the field to be removed is a user field.
The opposite needs to happen.
Merge branch 'develop'