Simplify Respositories, Switchboard and Switchboard-indirection.

This is a step into separating Call into Call + Connection.

Changes:
1. Update Repositories to:
  A. Share code via the new BaseRepository
  B. Perform a lookup per call instead of attempting to have 1 lookup
     work for concurrent calls. This allowed removal of extra state
     out of the repositories (mIsLookupInProgress) and out of
     Switchboard (mNewOutgoingCalls, mPendingOutgoingCalls, etc).
2. Add a OutgoingCallEntry class to Switchboard to support 1 service
   lookup per outgoing call. The new class maintains the necessary
   state (CS collection & selector collection).
3. Outgoing/IncomingCallsManager now reports success/failure directly
   to the Call class instead of indirecting through the switchboard.
4. Switchboard, for the time being, kept the outgoing call timeout and
   triggers it through OutgoingCallEntry.

Change-Id: I01196dd5384ad256cf09035018a76abaadb2c04d
diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index fe984cd..d86a8f9 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -394,6 +394,10 @@
     }
 
     void handleFailedOutgoing(boolean isAborted) {
+        if (isAborted) {
+            finalizeAbort();
+        }
+
         // TODO(santoscordon): Replace this with state transitions related to "connecting".
         for (Listener l : mListeners) {
             l.onFailedOutgoingCall(this, isAborted);
@@ -479,7 +483,7 @@
             // objects and remove any multi-class shared state of incoming and outgoing call
             // processing.
             Switchboard.getInstance().abortCall(this);
-        } else {
+        } else if (mState != CallState.ABORTED && mState != CallState.DISCONNECTED) {
             Preconditions.checkNotNull(mCallService);
 
             Log.i(this, "Send disconnect to call service for call: %s", this);