Fix arrow shaft name / add CustomMaterial support to DynamicToolPart

 * Fixes #1275

#### Prioritized list of how the name gets resolved for custom materials:

##### If CustomMaterial.input is not null:
  1. `"toolpart." + partName + "." + (CustomMaterial.input.getUnlocalizedName() with the part before the first period removed)`
  2. `"toolpart." + partName` with %%material replaced by `"toolpart.material." + (CustomMaterial.input.getUnlocalizedName() with the part before the first period removed)`
  3. `"toolpart." + partName` with %%material replaced by `CustomMaterial.input.getDisplayName()`

Example with Blaze Rod:
  1. `toolpart.Shaft.blazeRod`
  2. %%material = `toolpart.material.blazeRod`
  3. %%material = `"Blaze Rod"` (the localized name of a blaze rod ItemStack)

##### If CustomMaterial.input is null:
  1. `"toolpart." + partName + "." + customMaterial.oredict`
  2. `"toolpart." + partName` with %%material replaced by `"toolpart.material." + customMaterial.oredict`
  3. `"toolpart." + partName` with %%material replaced by `customMaterial.oredict`

Example with stickWood (note: this isn't currently how it works; the ArrowShaftMaterial is added using a Items.stick ItemStack):
  1. `toolpart.Shaft.stickWood`
  2. %%material = `toolpart.material.stickWood`
  3. %%material = `"stickWood"` (the oredict string)