Only run cleanup code when it's needed.
Only run cleanup code when it's needed.

When EnforcedCleanupSection was written, the intention was that cleanup
sections would only be run in the child program if the parent program
was killed suddenly (e.g. kill -9) and didn't have a chance to run them.

Unfortunately, sharing state using a shared file descriptor doesn't
work. Therefore, I've switched the program to use pipes instead.

BUG=chromium:214624, chromium:246260
TEST=Run with CL:59361 and verify completion stage only run once.
TEST=Run example paladin run.

Change-Id: I9ac1c3f674ddf8a9b1ba7060418c3b864d875cb7
Reviewed-on: https://gerrit.chromium.org/gerrit/62429
Commit-Queue: David James <f231dc574bbeb62604660cbc162d1b8642a0a3af@chromium.org>
Reviewed-by: David James <f231dc574bbeb62604660cbc162d1b8642a0a3af@chromium.org>
Tested-by: David James <f231dc574bbeb62604660cbc162d1b8642a0a3af@chromium.org>

chadversary/chromiumos.chromite,bpsinc-native/src_third_party_chromite,chadversary/chromiumos.chromite,bpsinc-native/src_third_party_chromite,bpsinc-native/src_third_party_chromite