Don't actually pull this - I'm just submitting the PR to highlight the Flashlight changes

This integrates the new flashlight, without MITM and with the ability to tunnel XMPP and other such protocol over CloudFlare.
So here's the next problem - we construct PublicIpAddress all over the place, including in LanternUtils where we don't have access to a Model.  Should I just pass in the model to the constructor and then modify callers to either inject the model or, for static uses like LanternUtils, accept the model in their own method signature?

Note - the promiscuous construction is an issue with the event-based way it works right now, because we're registering these guys as event handlers which will likely keep them from getting GC'ed.