Allow JPA properties to be Objects as well as simple strings.

This is a re-worked patch from the original issue #750

https://code.google.com/p/google-guice/issues/detail?id=750

----
JpaPersistService takes a parameter thus:
   Properties persistenceProperties

However, this is used later to create an entity manager:
  Persistence.createEntityManagerFactory(persistenceUnitName,
                                         persistenceProperties);

The signature for that method is (String, Map) NOT (String, Properties).

If one is using Hibernate, you can pass the desired DataSource object in
using that Map with Environment.DATASOURCE storing the actual object.
Clearly you cannot do that if it's Properties (String->String map)

Changing this so that the persistenceProperties is a Map would solves this,
so you may now do (for example)

  DataSource ds = ...;
  Map p = new HashMap();
  p.put( Environment.DATASOURCE, ds );
  JpaPersistModule jpaPersistModule = new JpaPersistModule("myapp-db")
                                          .properties(p);

Since all Properties objects *are* Map instances, this is a non-breaking
change.

Signed-off-by: Nigel Magnay <nigel.magnay@gmail.com>
Do you mean something like
private Map<?,?> properties;

(I'm guessing this map will never have object keys as I can't see how that makes any sense. That said, the JPA interface itself is just a raw Map, and there's no accounting for how that might get abused!)

I assume I then need to modify the configurePersistence to a generic:

TypeLiteral<Map<?, ?>> mapType
              = new TypeLiteral<Map<?, ?>>() {};
...
bind(mapType).annotatedWith(Jpa.class).toInstance(properties);

? Or is there a better way (I didn't quite follow how I could use an @Provides, but I'm new to guice..). 

I'll clean up the formatting - I'm gonna blame it on the IntelliJ EAP I started running! :-)