Working on code. No functional changes
EPBunch can now deal with missing fields.

L = constr.Layer_5 # Layer_5 may not exist in data.dt
    # return None ?
    # return '' ? -> maybe this one ? # DONE this
    # throw exception ?
L = constr["Layer_5"] # Layer_5 may not exist in data.dt
    # same as above
    # DONE as above
L = constr.Layer5 # there is a typo in the field name
    # Throw exception "BadEPFieldError"
    # DONE
L = constr["Layer5"] # there is a typo in the field name
    # Throw exception "BadEPFieldError"
    # DONE
constr.Layer_5 = 'B52' # Layer_5 may not exist in data.dt
    # you should be able to put a value in.
    # if Layer_4 also does not exit, make it ''.
    # DONE
constr["Layer_5"] = 'B52' # Layer_5 may not exist in data.dt
    # same as above
    # DONE