Re-introduce proper query string handling for serverSync and clientSync

[This line of code](https://github.com/jashkenas/backbone/blob/b9665843568c922f6249be2fc3538b7d52ba514c/backbone.js#L1258) in Backbone.sync triggered a small bug after yesterday's PR merge.  It would happen on clientSync invocations where `options` was passed without a `data` property.

In those cases, the unconditional `options.data = _.clone(options.data);` line I had added was causing the options object to acquire a `data` property (albeit `options.data === undefined`), which was overriding the `params.data` property when processed in Backbone.sync (in the line of code referenced).

This PR implements a conditional to only assign and clone `options.data` if it is defined, as well as adds more tests to guard against this happening in the future inadvertently.