shill: portal: Recheck portal state

Introduce a retry interval for automatically retrying portal
checks.  Also provide a Manager API method for immediately
re-checking portal status.

BUG=chromium-os:27335
TEST=New unit tests, tested on real machine, including setting
PortaCheckInterval over DBus, and using Jason's addition to
test-flimflam for 'recheck-portal'.
Change-Id: Idc7def18c6f863859e94f4d4e9f266ab2670679c
Reviewed-on: https://gerrit.chromium.org/gerrit/17367
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/connection.cc b/connection.cc
index bfd1962..c40fc60 100644
--- a/connection.cc
+++ b/connection.cc
@@ -87,11 +87,15 @@
 
   routing_table_->SetDefaultMetric(interface_index_, GetMetric(is_default));
 
+  is_default_ = is_default;
+
   if (is_default) {
     resolver_->SetDNSFromLists(dns_servers_, dns_domain_search_);
+    DeviceRefPtr device = device_info_->GetDevice(interface_index_);
+    if (device) {
+      device->RequestPortalDetection();
+    }
   }
-
-  is_default_ = is_default;
 }
 
 void Connection::RequestRouting() {