general ipv6 infra with optional net_bits and Yaroslav's special

use netaddr here: 
ip = netaddr.IPNetwork("fd00::/64")
>>> ip[0]
5: IPAddress('fd00::')
>> ip[-1]
6: IPAddress('fd00::ffff:ffff:ffff:ffff')
n_addresses = len(ip)