Initial implementation of EtherNet/IP CIP send, etc. encapsulation
o Not working yet -- not parsing logix EPATH correctly now
o Made name optional for enip parsers; default to context/class name
o Limited CPF parser with CPF item count repeat, and length limit
o Initial implementation of CIP Register, Unregister and Send...Data
o
Mostly working complete implementation of EtherNet/IP CIP Encapsulation
o Unconnected Send to Logix Read/Write Tag [Fragmented] mostly working
o Added ablity to dotdict()[] to resolve indexes embedded within keys,
  to allow simpler specification of tests on complex dotdict structures.
o Added initial parsing for Unconnected Send, etc. to support CIP
  encapsulation of Logix request, local to the target CIP host.
o Mock-up of Register, Unregister, List Services.
o
Correct some Logix Write Tag [Fragmented] parsing deficiencies
o Some CIP parsing still not working
o Must create write_tag/frag in the data artifact for logix.produce,
  and added some tests.
Completed parsing of incoming Logix Read/Write Tag [Fragmented]
o Added simple indexing to dotdict keys, and collapse dotdicts containing
  lists of dotdicts, emitting keys containing indexes.
o Correct dotdict.__getattr__ to issue AttributeError instead of __getindex__
  KeyError, so hasattr will work.
o Correct unconnected_send to properly limit the length of the encapsulated
  command payload for parsing, and allow zero-length Port Segment route
Merge branch 'feature-CIP-send'