Facebook scraper: phone => user ID

Adds a rudimentary scraper for Facebook. (See our Gdrive for config.py info.)
This may or may not be stable, but it appears to work for now. I also
implemented caching of the result.
add caching to reverse image
refactor reverse_image
update reverse_image selectors_to_keep to fix the data:image problem
Proof-of-concept for loading data from multiple sources

The previous version of the site hit one endpoint in Python, then only after
receiving this data, loaded the proper HTML template. This is bad -- if you're
hitting multiple endpoints, you need to wait for them all to return before
showing anything!

I changed the page to initially load with no data (just loading
spinners/indicators), then use AJAX to fill in each part as the endpoint
returns the data.

This is just a proof of concept. It's ugly and there are tons of bugs (namely,
if an endpoint fails to return data, I don't check/handle that properly).
However, I think it's a good base to build off of.