Experimenting with a Parameter descriptor

Some inspiration taken from http://ioam.github.io/param/

This is the first step in a more robust and scalable
solution to several issues that keep cropping up,
including, but not limited to:
  - probing
  - setting default parameters for all Ensembles, LIFs, etc
  - input validation (reasonable values for parameters)

In general, these changes give us more control over
the attributes on our objects. Notably, however,
this additional control has not come at the expense
of readable scripts, as I didn't have to make any changes
to the unit tests or examples despite changing
everything in objects.py.
Builder no longer modifies model
sim.data is a dictionary now
Return builder.data
A few fixes