AndroidDistribution class to fetch and validate Android SDK

The Android SDK has two components that are modularly installable and used in Android BUILD files- the API level for the target,
and the version of the build-tools used to construct the target. When a user has an SDK in their path, there is no guarantee that either
the API nor the build-tools version they need have been installed into their sdk.

This class looks for an Android SDK on the machine's path (using common SDK aliases) and then checks to see if the
requested API (target_sdk) and build-tools (build_tools_version) are installed. Most lookups are cached to minimize
repeated actions.

How we verify these installations is through checking for executables/files that comprise them. The SDK already provides a command-line tool
to manage installation of these modules but the only way to check installed targets is through grepping its output.
Since that tool doesn't seem to do much more than check for the presence of files/executables it seemed better to mimic those
checks as opposed to hacking up an output parser. As the class comments say, we can add more checks if we prefer.

Testing Done:
ci.sh passes locally.

Reviewed at https://rbcommons.com/s/twitter/r/636/