add some things from reflect, change some behaviors to make it behave much more like reflect does, add FieldsByName, expose FieldByIndexes