Better support for array and struct serialization

This patch allows better encoding of nested structs and arrays to follow
[conventions followed by frameworks like Rails][1] when parsing query
strings such as ```ids[]=1&ids[]=2&ids[]=3``` for arrays and
```user[name]=acme&user[addr][postcode]=1234&user[addr][city]=SFO``` for
hashes.

Changes:

 * Encode nested attributes: ```Parameter.Nested.Value = "str"``` would
 be encoded as ```parameter[nested][value]=str```
 * New ```key``` tag option for arrays so that in stead of encoding an
 array as ```a=one&a=two``` it's encoded as ```a[]=one&a[]=two``` which
 are read

[1]: http://guides.rubyonrails.org/action_controller_overview.html#hash-and-array-parameters