swift-sim: do case-insensitive search for Content-Type header

Headers names are defined as being case-insensitive by RFC 2616
Section 4.2:

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

It turns out that angular-mocks doesn't normalize the case in the
$httpBackend before it invokes the handler. We now do it when it
lookup the Content-Type header.
swift: avoid sending a default Content-Type header

Before, postObject would add a default Content-Type header with a
value of "application/json;charset=utf-8" in case no Content-Type
header was found in the request. Explicitly setting the header to
undefined disables this behavior.
object: add support for creating new metadata headers
e2e: add timezone to last modified dates

This makes it unnecessary to convert the dates to UTC afterwards.

Infact, the conversion was wrong since Date.getTimezoneOffset returns
the local timezone offset *regardles* of the timezone used to create
the timestamp. So a Date created from "2014-08-16T13:33:21.000Z" would
still report a non-zero timezone offset (unless you run the test in
the GMT timezone).

We now only adjust for the timezone offset when we set the last
modified date to the current time. This is okay since we're dealing
with a new Date that we have created ourselves.
swift-sim: change internal representation of objects

Before, objects were represented by the JSON that we needed to return
in listContainer.

This was limiting since we will want to store more information per
object than what this method returns. The first example of extra data
will be custom metadata headers.

We therefore now represent the objects by the headrers we need to
return when headObject is called.
swift-sim: remove setContainers method (fixes #92)

Before, containers and objects were stored in separate variables. They
are now merged into a single data object. The keys of this object are
the containers. Each container has an 'objects' property which maps
object names to the objects themselves.

This simplifies the code a lot by letting listContainers compute its
result dynamically based on the objects registered. This will also
allow us to add container metadata since we now have an object to
attach this data to.
swift-sim: abstract finding containers and objects

This adds general methods for finding containers and objects based on
the fetched URL. This makes the error handling more uniform.
object: mark added headers as old after save
swift-sim: support adding custom metadata
swift-sim: align setObjects argument with internal representation

This means that setObjects now take a hash mapping object names to the
object headers. Before, it look a list JSON blobs, the same blobs that
were returned by listContainer.

Since we will want to add more data to each object than returned by
the listContainer method, we need a wider interface. In particular,
this will allow us to test objects with custom metadata set.
e2e: test removing system headers
object: forbid removing the Content-Type header

Swift behaves in a peculiar way with regards to the Content-Type
header. While other headers can be unset, the Content-Type header is
always present. Trying to unset it will leave it unchanged.

This is now reflected in the simulator which will always copy the old
Content-Type header in postObject. In the UI, the trash can icon has
been removed for that header.
swift: check all headers for a trace of the Content-Type header
object: allow adding new system headers

After clicking 'Add new header', a header is added with a drop-down
where the legal names can be selected. There is currently no checking
that the header named added are unique -- we can perhaps add that
later.
Merge pull request #112 from mgeisler/allow-adding-headers

Allow adding object headers