When registering a new user using POST `/_matrix/client/r0/register`, the server was returning a 500 error when user name was already taken.
I added a check in `completeRegistration` to verify if the username is available before inserting it, and return a 400 `M_USER_IN_USE` error if there is a conflict, as [defined in matrix-doc](https://matrix.org/speculator/spec/HEAD/client_server/unstable.html#post-matrix-client-r0-register)
Signed-off-by: Thibaut CHARLES cromfr@gmail.com
* Add input API for adding invites to the roomserver.
This API handles invites received over federation that occur outside of a room.
* Add some docstring for withTransaction
* Use a nicer pattern for wrapping transactions
* Fix MembershipUpdater method to not commit the transaction before returning it
* Use the Transaction interface from common