Improve battery support

- Use dbus+UPower if available (code taken from kovidgoyal@7f73453 and
  refactored).
- Use any battery from /sys/class/power_supply: replace hardcoded BAT0/BAT1 with
  cycle.
- Use pmset.
- Use win32com.client with Win32_Battery object (code taken from an [SO
  question][1] and refactored).
- Use ctypes + GetSystemPowerStatus (from [the same question][1]).

Completely untested (only know that syntax is correct), will probably have to
hear replies from users to merge.

[1]: http://stackoverflow.com/a/21083571/273566

Closes #677.
Fixes #820.