Cache
-----
Added an interface called RouteCache and provided a concrete Implementation called InMemoryRouteCache. No need for static now. To keep the existing logic work, I've made InMemoryRouteCache singleton. Ideally Cache should be passed into the Airport. In which case, it won't need to be singleton.
Added a flush method to the Cache, to clear out the cache

Airport
------
Added an overloaded constructor to the Airport, to allow for passing in a different type of cache
Added a Airport.toString() method to make debugging tests easier
Made outgoingAirports (in Airport) final. Also changed the implementation of setOutgoingAirports(). Also renamed it to addFlightTo() to make it more communicative.

AirportTest
---------
Got rid of PowerMockito (one should always avoid using PowerMockito. Its a disgusting framework)
Renamed shouldReturnValueInCacheIfExists() to returnsCachedValueIfExists() - Less verbose and to the point. Also in the same test earlier we were using assertEquals(), this is wrong. We should use assertSame() Because we want to make sure the cached value is returned, not a new instance.
Renamed shouldInsertIntoCacheIfNotPresentAlready() to cacheValuesForFuture() - Again less verbose and to the point. Also after we've got rid of PowerMockito, look how clean the test looks
got rid of setOutgoingAirport() method, instead now we can call airport.addFlightTo(), which is lot easier to understand. Earlier it was not clear which is added to what.