bundle network options
currently we have a bunch of special options at the end of the initialization call, and they have weird ordering requirements. by making an interface for NetworkOptions we can simplify instantiation and make it easier for users to provide only the option they care about, as well as have a natural place to extend with more options later.