More NHIbernate changes

Created ExecuteForAllRepositoriesExcept attribute for integration test
because NHibernates Linq provider does not suport some things (like
calling Select on the returned IQueryable<> from query.Take().Skip())

The best practices usage for NHibernate sessions should be something
like:

using (var session = factory.OpenSession())
using (var trans = session.BeginTransaction())
{
// some calls to get things

// some calls to update those items, or add, etc.

trans.Commit();
}

This ensures everything is done in a single transaction.

So I've made the NHibernateRepository so you can pass in your own
session object that you manage or pass in a SessionFactory that gets
managed by the repository and closed and committed.  This provide some
flexibility which I think will work well.