All-in-one nets

This PR lets you specify a `phase`, `stage`, and/or `level` in each of your layers to indicate whether or not these layers should be available.   The most obvious application of this is to insert "phase: TRAIN" or "phase: TEST" to special layers that are only used in one or the other so that you need not repeat the common layers; e.g., a data layer which should have a different source at train vs test time, and the accuracy layer which can only be used in the test net (although #686 will fix this  whenever someone reviews that ;).

The `level` parameter, an `int`, allows you to turn off different layers all at once (all those that have level < the net's setting), e.g. to do layerwise training.  The `stage` parameter, suggested by @shelhamer, (which generalizes the `level` parameter in a sense), a `string`, allows you to create arbitrary groups of layers.  I'm not sure if I made thee best decisions with this interface design, feel free to make suggestions.

The `train_net`, `test_net`, `train_net_param`, and `test_net_param` should all work as before.
Although the logging is precise, the two cases for the logic are just `net_param` inline prototxt vs `net` file and the `(train_)_net_*` cases could be combined or conciseness. Do what you like.