Improved API consistency

Mostly by making the base `get_context_data` do more work.