Advanced URL Signing

Hi

I noticed there was no way to generate presigned url's for PUT/DELETE ... or really any request other than GET, and found that this wasn't really sufficient for my personal needs.  After figuring out how to add more flexible support, I thought I'd offer it back.

The interface should still be compatible without code changes, thanks to the use of default parameters matching the behavior of the original url methods.

Additionally, a new set of durational wrappers were added, to provide a simpler method of providing relative expiration times using scala.concurrent.duration, eg:

```scala
S3.durationalUrl("testbucket", "test/file", 15.minutes)
```