Relax local-part parsing to allow consecutive dots, leading dots, and trailing dots

From the spec:

local-part      =   dot-atom / quoted-string / obs-local-part
dot-atom-text   =   1*atext *("." 1*atext)
dot-atom        =   [CFWS] dot-atom-text [CFWS]