Refactor GcmService to handle startId's better.

GcmService was restarted several times by the system, racking up a nice
huge restart delay. Assuming the reason for that was because
stopSelf(int) was called for invalid items and the system still hadn't
seen the previous startIds being stopped, thus it restarted the service.

See #171.