User pages in the admin section

I've pulled out the merge of #270 so it can be merged with the newly-added tests all in one go.

@alastairs: I'd like an opinion on some of these, as a few of them feel like I'm testing just the implementation.
That is still testing the implementation though. As I had already written the code, I tried to write these test as failing by not looking at the implementation and asserting on the behaviour. Once they were failing, I added the setuip to each test to put the sut in a state where the test could pass..

e.g. I know that calling `controller.Details(123)` should be calling `userProfileRepository.GetUserProfileById(123)`, so ensure that is happening.

As it stands, the actual test (act & assert steps) doesn't really care what happens, so long as it receives a user profile with an id of 123 when it asked for user profile 123. The arrange section of the test is the thing that is implementation specific.

The alternative test would look like:

```
public void Details_GetsTheCorrectUserDetails()
{
    const int userId = 123;
    var userProfileRepository = Substitute.For<IUserProfileRepository>();
    var sessionRepository = Substitute.For<ISessionRepository>();
    var controller = new UserController(userProfileRepository, sessionRepository);

    var actionResult = controller.Details(userId);

    userProfileRepository .Received().GetUserProfileById(userId);
}
```

That doesn't seem any better.