Give mocks names

Fixes #74. This gives ever mock a unique name initially, of the form `Mock<TypeBeingMocked:1234>`, where `1234` is a random 4 numbers, to make mocks more easily distinguishable.

This name can be reconfigured, via the new `mock.Name` property, and the name is passed on to the actual mock object; if there's no explicit implementation of ToString in the hierarchy (so it's falling back to the default object implementation) then it instead takes the name of the mock plus '.Object', e.g. `Mock<TypeBeingMocked:1234>.Object`. If there is a virtual implementation of .ToString already present in a superclass of the mock, then we proxy that as normal to preserve previous behaviour, returning `null` as a default value.