DATAREST-117 - @JsonIgnore and other Jackson annotations are ignored

This fix re-works the PersistentEntityJackson2Module serializer and deserializer such that all Jackson annotations are still honored for both serialization and deserialization.
This fix necessarily involves a rewrite of some existing code pertinent to the '_link' section deserialization. The rewritten version now implements this link deserialization properly and thereby introduces a significant amount of new functionality in this area. It is therefore now possible to link to other entities when performing a PUT or POST.

As a result of this change, all Jackson annotations can now be used within the domain classes including annotations that rename and hide properties such as @JsonProperty and @JsonIgnore.

It is also now possible to perform POSTs or PUTs with links such as:
{ 
  "_links" : {
    "creator" : { "href" : "http://localhost:8080/people/2" }
  },
  "orderName" : "Junk food",
  "lineItems" : [ 
  	{ "name" : "Java Chip" },
  	{ "name" : "Chocolate Mocca " } ]
}
SDR will now correctly handle the _links section.  In the case above, a new order is created with the existing person identified by id 2 as its creator.

Link arrays are also supported, like in the following case:
{
  "_links" : {
    "authors" : [ 
      { "href" : "http://localhost:8080/authors/5" },
      { "href" : "http://localhost:8080/authors/57" },
      { "href" : "http://localhost:8080/authors/28" }
    ]
  },   
  "isbn" : "978-0321349606",
  "title" : "Java Concurrency in Practice"
}

Transitive dependencies are supported also (at any depth):
{ 
  "authors" : [ {
      "_links" : {
        "books" : [ { "href" : "http://localhost:8080/books/7" } ]
      },   
      "name" : "Joshua Bloch"
    }
  ],
  "isbn" : "978-0321356680",
  "title" : "Effective Java"
}

When a 'self' link is encountered, the id is extracted from the URI and used as the ID for the object.

The change was focused on the ResourceSerializer and ResourceDeserializer classes (registered by the PersistentEntityJackson2Module).

The MapResource class used by the ResourceSerializer has been updated such that the entire domain class is a member of MapResource and @JsonUnwrapped is used to 'flatten' the class so that its members are at the same object graph level as the added links. A Jackson filter is used to filter out association properties that have already been added as links. Since the domain object is then serialized by Jackson as a regular class (as opposed to the former behavior where it being treated as collection of fields), all Jackson annotations are honored.

The ResourceDeserializer class has been modified such that deserialization is split into two stages.

The first stage involves pre-processing the Json data while building a token buffer that will, upon completion of this stage, contain the complete domain object including the linked assoications. During this stage, when a _links section is encountered, the parser transforms each link into an object by retrieving it from the associated repository. Once the object is retrieved it is then serialized into the token buffer and is therefore inserted into the object graph at the point where it is encountered.

The second stage simply involves deserializing this token buffer as the 'domain type' being deserialized. Since this uses the default Jackson deserializer this means that all Jackson annotations will be honored. 

Unit tests have been added to JpaWebTests as well as a whole new test suite 'ResourceDeserializerTests' (in the 'json' sub namespace) that focuses on the ResourceDeserializer behavior.