Bug 976109 - Hawk integration

This is split up into several checkins for ease of review; my expectation is that it will be easiest to review each checkin separately, even though we'll end up squashing them before finally landing.