Simplify assigning attributes from the API

This refactors the Need model so that, when we are initializing a Need
from an API response (ie. when the 'existing' argument is true), we now
filter the attributes so that only the writable fields are passed into
the update method. This prevents the ArgumentError exception from being
raised. We maintain the old behaviour when the need is being created or
updated so that invalid form fields will continue to raise an exception.

This also splits apart the 'assign_and_filter_values' method into two
separate methods which have a clearer intent and are no longer
destructive to their provided arguments.

- 'assign_read_only_attributes' assigns the instance variables for the
  attributes we consider "read only" from the API.
- 'filtered_attributes' slices the provided hash to only return keys
  present in the FIELDS constant.

I've moved around a few comments and added more comments around the
initialize method.