Initial Commit

Original source from Johnny Chung Lee's project page with one small
change: it now waits a good 10 seconds instead of 2 when using external
service to look up the external IP address to avoid a null reference
error when it timed out and returned null.