In the future, a grain tab may in fact be displaying multiple grains at once, and thus multiple sessions. This can happen when the Picker Powerbox is displaying an embedded picker, or when a grain embeds other grains (e.g. the "Tabbify" proposal). It may also be useful for a single grain to recognize server-side when multiple sequential back-end sessions actually come from the same tab, as occurs e.g. when the user suspends their laptop and then comes back later without refreshing their browser.
In some cases it may be helpful if these grains can recognize that they live in the same tab. Hence we generate a `tabId` which is passed to `newSession()` and uniquely identifies the tab.
The current motivating use case is one where the Powerbox is being used in an authentication interaction: The app wishes the user to "verify" their email address via a powerbox query. The user chooses which address to verify, and a verification capability is returned. We need to make sure the app cannot take this verification capability and pass it off to other users who can then "authenticate" as the address to other apps. To do that, each app needs to be able to check that the verification was actually created by this session's user. We could do this by attaching verification to user IDs, but that would not work in the case that the user is anonymous. Tab IDs are assigned even to anonymous users.
Turns out the reason Github was serving me absurdly large image files is because my own avatar was a photo encoded as a PNG. That ought to be unusual so there's no need to cap this so tightly.
Google serves 512x512 by default. Github serves 460x460 for some reason, but fine, close enough.
Also fix jpeg content sniffing.