Return error code from UnmountDeviceRecursively.

At the same time, fix up two outstanding TODOs:
1. A potential memory leak due to lack of callback data ownership.
2. Not correctly reporting unmount errors on a multi-parition device.

Also add some tests for UnmountDeviceRecursively.

BUG=873903

Change-Id: I3e99afa4e0185b18c1d7077a5c65fc225a5751b3
Reviewed-on: https://chromium-review.googlesource.com/1179421
Reviewed-by: Noel Gordon <[email protected]>
Reviewed-by: Toni Baržić <[email protected]>
Commit-Queue: Noel Gordon <[email protected]>
Cr-Commit-Position: refs/heads/master@{#584627}
10 files changed