[Courgette] Refactor: Manage AssemblyProgram and EncodedProgram with scoped_ptr.

Previously naked pointers AssemblyProgram and EncodedProgram are used over the
place, and are deallocated using Delete{AssemblyProgram, EncodedProgram}().
In this CL we use scoped_ptr to manage the life cycles of these objects.

- Removed DeleteAssemblyProgram() and DeleteEncodedProgram() and replaced calls
  with e.g., program.reset(nullptr); if the manual deallocation is a peak
  memory optimization.
- Moved Encode() and ReadEncodedProgram() to the .h files matching the .cc files.
- Extracted DetectExecutableType() and ParseDetectedExecutable() from
  disassembly.* to new files program_detector*c, since Disassembly is really an
  implementation that caller's don't care about.

Review URL: https://codereview.chromium.org/1629703002

Cr-Commit-Position: refs/heads/master@{#372212}
18 files changed