Improve perf of Base#initialize and Base.instantiate:

  * Rather than loop over all definitions, only call instantiate on ones with defaults.
  * Convert the keys of Base.attribute_definitions always be a string. Storing them as a symbol requires constantly calling to_s on the keys, which ends up creating many string objects. It's better to simply call to_s on an string, which returns self.
  * Remove the hardcoded array default of ```[]```.

@kadwanev