Avoid overloading app.droplet_hash=

To make it easier to set package_state to STAGED in different places for the DEA and Diego

[#74641650]

Signed-off-by: Max Brunsfeld <mbrunsfeld@pivotallabs.com>
Simplify AppFactory

Signed-off-by: Max Brunsfeld <mbrunsfeld@pivotallabs.com>
Mark app as staged after receiving staging completion message

Previously, we would mark the app as staged as soon as the droplet upload
completed. This created two problems:

1. The bulk apps controller would return apps that had droplets but had no
   staging metadata. We had solved this by adding more complex filtering to
   that controller, but this introduced an N+1 query. This commit simplifies
   that query and makes it performant again.

2. The instances API returns a NotStaged error unless the app is marked
   staged, which is important because it lets the CLI know when staging is
   complete. Before, the CLI would treat staging as complete as soon as the
   droplet had been uploaded, so any staging logs that were emitted after that
   would be interspersed with other output from the CLI.

Signed-off-by: Abhijit Hiremagalur <abhi@pivotallabs.com>