Refactor heartbeat to delegate to the modulestores and sql

LMS-2801

Refactored scalable heartbeat which still does something useful and is equivalent in functionality as far as xml backed courses are concerned but doesn't return the course ids.

@ormsbee @nedbat @e0d first 2 to review win.
Just a clarification here because I think I'm getting confused with what calls what. Does this invoke the heartbeat() defined above in modulestore/__init__.py? Because that would return None, which would error when trying to do a dict update...?

Also, `dict` can take an iterable of tuples as a constructor. So you could do:

```python
result = dict(store.heartbeat() for store in self.modulestores.values())
```