core: switch to Java 7 source and bytecode (#4801)

javac can produce code that invokes Object.requireNonNull when instantiating
an inner class using a instance variable. See
https://bugs.openjdk.java.net/browse/JDK-8202137
diff --git a/core/build.gradle b/core/build.gradle
index e5670e4..700592f 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -1,11 +1,5 @@
 description = 'gRPC: Core'
 
-// Workaround:
-// [Undefined reference (android-api-level-14-4.0_r4)] io.grpc.internal.(Rescheduler.java:87)
-//   >> Object java.util.Objects.requireNonNull(Object)
-sourceCompatibility = 1.6
-targetCompatibility = 1.6
-
 dependencies {
     compile project(':grpc-context'),
             libraries.gson,
diff --git a/core/src/main/java/io/grpc/internal/Rescheduler.java b/core/src/main/java/io/grpc/internal/Rescheduler.java
index e4d1980..75a106e 100644
--- a/core/src/main/java/io/grpc/internal/Rescheduler.java
+++ b/core/src/main/java/io/grpc/internal/Rescheduler.java
@@ -60,7 +60,7 @@
       if (wakeUp != null) {
         wakeUp.cancel(false);
       }
-      wakeUp = scheduler.schedule(new FutureRunnable(this), delayNanos, TimeUnit.NANOSECONDS);
+      wakeUp = scheduler.schedule(new FutureRunnable(), delayNanos, TimeUnit.NANOSECONDS);
     }
     runAtNanos = newRunAtNanos;
   }
@@ -74,17 +74,14 @@
     }
   }
 
-  private static final class FutureRunnable implements Runnable {
-
-    private final Rescheduler rescheduler;
-
-    FutureRunnable(Rescheduler rescheduler) {
-      this.rescheduler = rescheduler;
-    }
-
+  private final class FutureRunnable implements Runnable {
     @Override
     public void run() {
-      rescheduler.serializingExecutor.execute(rescheduler.new ChannelFutureRunnable());
+      Rescheduler.this.serializingExecutor.execute(new ChannelFutureRunnable());
+    }
+
+    private boolean isEnabled() {
+      return Rescheduler.this.enabled;
     }
   }
 
@@ -99,7 +96,7 @@
       long now = nanoTime();
       if (runAtNanos - now > 0) {
         wakeUp = scheduler.schedule(
-            new FutureRunnable(Rescheduler.this), runAtNanos - now,  TimeUnit.NANOSECONDS);
+            new FutureRunnable(), runAtNanos - now,  TimeUnit.NANOSECONDS);
       } else {
         enabled = false;
         wakeUp = null;
@@ -110,7 +107,7 @@
 
   @VisibleForTesting
   static boolean isEnabled(Runnable r) {
-    return ((FutureRunnable) r).rescheduler.enabled;
+    return ((FutureRunnable) r).isEnabled();
   }
 
   private long nanoTime() {