Add a /main/remote endpoint for remote login
Use Host class to manage remote hosts
Test the Credentials.getForHost() method
Unit tests for host module
Test the methods of Host class
Test host discovery
Prevent race conditions on ensureHost()

Use a schlock to make sure we don't try to write the same host in two
different lines of execution.
Pass hostname or Host object to Credentials

We have a couple of ways to get credentials; either with a Host object or a hostname.
Test passing Host object to Credentials
Create a remote request token

Step one, creating a request token for a remote host.
Test the authorize URL
Test more of the host interface
Unit test for RemoteRequestToken
Storage for access tokens for remote accounts
Let control go to the server for remote login
Remote login authorization
Save the pair when it's authorized
More details in credentials registration
Switch remoteUser to principalUser

This is kind of a sweeping change to support having identified
principals (= person who is using the site) who are not users (people
who have an account on the site).

It entails changing the authentication methods to set different
properties on the request, and checking those properties in the API code.

It's mostly working, but there seems to be some problem with the
finishers which I'm going to fix right away.
Use req.principal for sanitizing activities

We were passing the req.principalUser to the Activity class to set
context for sanitizing. Instead, we now pass req.principal, in case
there is no principalUser.