Add return statements after finish()

Fixes a crash issue where finish() does not immediately exit and the code
continues on to access a null pointer.
Don't use BigInteger to convert md5sum to hex

BigInteger removes leading zeros.  Instead, add and use internal
toHex() function.
Remove [] brackets from log tag and change level to warn
Fix issues related to ShellCommand

- Use command.waitForExit() instead of command.checkForExit() to get exit value.

By using checkForExit() the command may or may not have exited yet, and could
incorrectly return the default exit value of -1.  Using waitForExit() makes
sure the command exits and returns the correct exit value.  This fixes the
iptables command issues (check-rules error, etc).

- Check command.exitval in addition to command.error in checkRoot()

Previously, we only checked to see if there was an error rather than ensuring
that the correct exit value was returned.  Now we check both cases.  This
fixes the issue where sometimes a device would incorrectly be detected as
rooted.

- Add error as member of ShellCommand instead of returning a String
  from cmd.start()

It's just cleaner this way.