Allow encoders "as" options to be functions

This change allows the encoders "as" option to be either a function or string.

Now we can write something along these lines to make sure the keys are always underscored when communicating with the backend (even though we can encode them as camelCased):

```coffeescript

class App.Invoice extends Batman.Model

  @defaultEncoder:
    as: (k) ->
      Batman.helpers.underscore(k)
    encode: (v) -> v
    decode: (v) -> v
  
  @hasMany 'payments' 
  @hasMany 'lineItems'

  @encode 'number', 'poNumber', 'taxName', 'taxRate'

This could be an alternative fix for #205.

This change would also allowing batch prefixing certain keys:

```coffeescript

class App.Invoice extends Batman.Model

  @encode 'number', 'subtotal', 'discount', 'total',
    as: (k) -> "invoice_#{k}"
    encode: @defaultEncoder.encode
    decode: @defaultEncoder.decode