Added type parameter to HalResource interface

This would address issue #13 by allowing type adapters to be registered using the optional type parameter of the HalResource interface.

Example usage:
```java
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(HalResource.class, new HalSerializer());
builder.registerTypeAdapter(new TypeToken<HalResource<FirstModelResource>>(){}.getType(), new HalDeserializer(FirstModelResource.class));
builder.registerTypeAdapter(new TypeToken<HalResource<SecondModelResource>>(){}.getType(), new HalDeserializer(SecondModelResource.class));
builder.setExclusionStrategies(new HalExclusionStrategy());
Gson gson = builder.create();
```