Do we need some thread-safety in here? e.g. methods can modify `BasicBSONList members` by adding to it, while another method could be removing it etc (and BasicBSONList extends ArrayList so is not thread safe)? Or is the guarantees made by the caller of ReplicaSetConfig?

If making this thread safe, then:
* declare name and members final
* synchronize on modifying version or members
* synchronize on build, but with taking a copy of members rather than embedding the same object within the returned BasicBSONObject.