Build username from outcome service URL and user ID if provided

This prevents multiple accounts from being created for the same remote user for different activities.
Because we use the shared secret as the consumer key, we end up with a couple of issues:
* a different consumer key being used for each activity by the same consumer
* the same consumer key being used by different consumers for the same activity
The multiple accounts are caused by the former, whilst the latter could cause conflicts between consumers.