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'

```

**UPDATE:** The code above was a bad example and seems to mess up associations.  It's probably a better idea to explicitly specify which keys that should have its name changed as in the example below.

This could be a solution for #205.

This change would also make it possible to batch prefixing keys:

```coffeescript

class App.Invoice extends Batman.Model

  @encode 'number', 'subtotal', 'discount', 'total',
    as: (k) -> "invoice_#{k}"
    encode: @defaultEncoder.encode
    decode: @defaultEncoder.decode

```