new targets transformer
new targets transformer

This simplifies the initial targeting logic, and removes the complex
algorithm for finding descendants that result in output changes, which
hid bugs that failed with modules.

The targeting is handled in 2 phases. First we find all individual
resource nodes that are targeted, then add all their dependencies to the
set of targets. This in essence is all we need for targeting, and is
straightforward to understand.

The next phase is to add any root module outputs that can be solely
derived from the set of targeted resources. There is currently no way to
target outputs themselves, so this is how we can allow these to be
updated as part of a target.

Rather than attempting to backtrack through the graph to find candidate
outputs, requiring each node on the chain to properly advertise if it
could be traversed, then backtracking again to determine if the
candidate is valid (which often got "off course"), we can start directly
from the outputs themselves. The algorithm here is simpler: if all the
root output's resource dependencies are targeted, add that output and
its dependencies to the targeted set.

apparentlymart/terraform,rnaveiras/terraform,pdecat/terraform,apparentlymart/terraform,hashicorp/terraform,ewbankkit/terraform,tommynsong/terraform,pdecat/terraform,pdecat/terraform,tommynsong/terraform,pdecat/terraform,apparentlymart/terraform,hashicorp/terraform,rnaveiras/terraform,ewbankkit/terraform,hashicorp/terraform,apparentlymart/terraform,rnaveiras/terraform,ewbankkit/terraform,ewbankkit/terraform,tommynsong/terraform,apparentlymart/terraform