Create InputMerger.

InputMerger is an abstract class that lets you specify how multiple
inputs to a Worker will be merged.  You specify an InputMerger in the
Work.Builder as a class name; the default is ClobberingInputMerger.

As part of this CL, I have created two reasonable implementations:
- ClobberingInputMerger
- ArrayCreatingInputMerger

Test: added tests
Change-Id: I4f9e8246246d3bcdcb22c92fd5f38fd473f018b6
diff --git a/background/workmanager/src/main/java/android/arch/background/workmanager/model/WorkSpec.java b/background/workmanager/src/main/java/android/arch/background/workmanager/model/WorkSpec.java
index 79ef7d8..14a22c7 100644
--- a/background/workmanager/src/main/java/android/arch/background/workmanager/model/WorkSpec.java
+++ b/background/workmanager/src/main/java/android/arch/background/workmanager/model/WorkSpec.java
@@ -42,6 +42,9 @@
     @ColumnInfo(name = "worker_class_name")
     String mWorkerClassName;
 
+    @ColumnInfo(name = "input_merger_class_name")
+    String mInputMergerClassName = OverwritingInputMerger.class.getName();
+
     @ColumnInfo(name = "initial_delay")
     long mInitialDelay;
 
@@ -94,6 +97,14 @@
         mWorkerClassName = workerClassName;
     }
 
+    public String getInputMergerClassName() {
+        return mInputMergerClassName;
+    }
+
+    public void setInputMergerClassName(String inputMergerClassName) {
+        mInputMergerClassName = inputMergerClassName;
+    }
+
     public Constraints getConstraints() {
         return mConstraints;
     }
@@ -217,6 +228,9 @@
                 && (mWorkerClassName != null
                         ? mWorkerClassName.equals(other.mWorkerClassName)
                         : other.mWorkerClassName == null)
+                && (mInputMergerClassName != null
+                        ? mInputMergerClassName.equals(other.mInputMergerClassName)
+                        : other.mInputMergerClassName == null)
                 && (mConstraints != null
                         ? mConstraints.equals(other.mConstraints)
                         : other.mConstraints == null);
@@ -227,6 +241,8 @@
         int result = mId.hashCode();
         result = 31 * result + mStatus;
         result = 31 * result + (mWorkerClassName != null ? mWorkerClassName.hashCode() : 0);
+        result = 31 * result
+                + (mInputMergerClassName != null ? mInputMergerClassName.hashCode() : 0);
         result = 31 * result + (int) (mInitialDelay ^ (mInitialDelay >>> 32));
         result = 31 * result + (int) (mIntervalDuration ^ (mIntervalDuration >>> 32));
         result = 31 * result + (int) (mFlexDuration ^ (mFlexDuration >>> 32));