Relax type-constraint on DatastoreInputReader filters parameter

MapreducePipeline with DatastoreInputReader with filters fails with BadReaderParamsError

What steps will reproduce the problem?
1. Run a MapreducePipeline job defined as:

yield mapreduce_pipeline.MapreducePipeline(
    job_name="exercise_aggregation",
    mapper_spec="<snip>",
    reducer_spec="<snip>",
    input_reader_spec="mapreduce.input_readers.DatastoreInputReader",
    mapper_params={
        "input_reader": {
            "entity_kind":
                "content_analytics.plog_models.ProblemLogSummary",
            "filters":
                [("date_done_str", "=", day_str)]
        },
    },
    shards=4)

What is the expected output? What do you see instead?
I expect the job to run correctly, since starting the exact same job with a control.start_map() call succeeds.

Instead, it fails with a BadReaderParamsError, as shown below.

Traceback (most recent call last):
  File "/Users/mattfaus/dev/webapp/third_party/mapreduce/lib/pipeline/pipeline.py", line 2039, in evaluate
    self, pipeline_key, root_pipeline_key, caller_output)
  File "/Users/mattfaus/dev/webapp/third_party/mapreduce/lib/pipeline/pipeline.py", line 1071, in _run_internal
    return self.run(*self.args, **self.kwargs)
  File "/Users/mattfaus/dev/webapp/third_party/mapreduce/mapper_pipeline.py", line 78, in run
    output_writer_spec=output_writer_spec,
  File "/Users/mattfaus/dev/webapp/third_party/mapreduce/control.py", line 116, in start_map
    parent_entity=transactional_parent)
  File "/Users/mattfaus/dev/webapp/third_party/mapreduce/handlers.py", line 886, in _start_map
    mapper_input_reader_class.validate(mapper_spec)
  File "/Users/mattfaus/dev/webapp/third_party/mapreduce/input_readers.py", line 765, in validate
    super(DatastoreInputReader, cls).validate(mapper_spec)
  File "/Users/mattfaus/dev/webapp/third_party/mapreduce/input_readers.py", line 554, in validate
    raise BadReaderParamsError("Filter should be a tuple: %s", f)
BadReaderParamsError: ('Filter should be a tuple: %s', [u'date_done_str', u'=', u'2013-10-14'])

This is happening because the call to simplejson.dumps() in pipeline._generate_args() (near line 1350) translates the tuple object into a list object when transforming into JSON.  This is reasonable, since there is no such thing as a tuple in JSON.  One option to do this would be to patch simplejson to handle tuples, as is described in http://stackoverflow.com/questions/15721363/preserve-python-tuples-with-json

Test Plan:
With eliana's diff applied http://phabricator.khanacademy.org/D4570
Hit this url to launch the job:  http://127.0.0.1:8080/admin/contentanalytics/plog_launch
Watch it work and not throw an exception!