Fix occasional crash due to missing _LowMemoryPipelineRecord.key

Summary:
_LowMemoryPipelineRecord needs to behave like a _PipelineRecord for all of our
use cases, and I originally thought that the key was never used, but it turns
out that it's used in a warning message in get_status_tree. This commit adds the
method in the straightforward way, which fixes an occasional crash in the
pipeline UI.

Test Plan:
Copy the warning message to an earlier place so it runs every time. Run the
code without this fix, and it consistently crashes. Apply this fix and it
consistently loads the UI correctly.

Reviewers: mattfaus, chris

Reviewed By: chris

Differential Revision: http://phabricator.khanacademy.org/D7965
Add an option to limit the pipeline depth in the pipeline UI

Summary:
Add a "depth" option that you can specify as a URL arg when loading a pipeline
status. This makes it so only pipelines up to that depth are loaded, so event
giant long-running pipelines can be loaded. The implementation is to use a
different algorithm for loading the pipelines, so this also removes the
restriction that the given pipeline needs to be a root pipeline (which is useful
for looking at the full tree for a sub-stage of a long-running pipeline).

This change should be pretty non-intrusive since the default arguments (no depth
specified) use the same loading algorithm as before, and the new code path is
only triggered explicitly.

The messes up the UI in a few minor ways which probably aren't a big deal. For
example, the [+] expand button still shows up for pipelines with children that
aren't loaded, and the "Filled by" links refer to the deepest visible pipeline
that outputs that slot, when they ideally would refer to deeper pipelines that
actually compute the slot value.

Test Plan:
-Find a large old pipeline that took 20-30 seconds to load and load it with a
smaller depth. It loads much faster, and the depth is limited in the way I
expect.
-Run a pipeline and sanity check that the slot values are all there and look
reasonable.
-Load a MapReduce pipeline with the depth limited and make sure the console
correctly shows up.
-Load a failed job that has the depth limited. Make sure it's possible to change
the pipeline "root" to be deeper pipeline nodes to track down the actual cause
of the failure.
-Make sure the depth doesn't disappear after auto-refresh or after checking or
unchecking the auto-refresh link, or after clicking the "refresh" link.

Reviewers: chris

Reviewed By: chris

Subscribers: mattfaus

Differential Revision: http://phabricator.khanacademy.org/D7984