Merge branch 'release/3.0.1'
Resolve #62 - NotPermittedInProductionException as well as convenience method

This adds a new convenience method which will throw an exception if the DEBUG
compiler flag is not defined.  It may be used to mark code which is OK in
debugging/testing builds but which should never make it to production.
Fix compiler error present in previous commit

This was an embarrassing oversight.  It's now fixed and the project compiles
once again.
Resolve #68 - Operator equality avoids using object functionality

This means that in scenarios where the object is proxied (for example, in an
NHibernate environment, using DynamicProxy), testing equality using operators
does not force the hydration of the object (with a database query) when it
doesn't need to.

The following comparisons are now handled without touching functionality of the
objects except (at the most) the 'Id' property:

* Comparison with self (reference equality)

* Comparison of a non-null with null

* Comparison where 'Id' properties are identical

* Comparison with an object that has been cast down to IEntity

In a fall-back scenario, the full 'Equals()' method is still consulted but in
most scenarios this is no longer needed.
Resolve #65 - 'WithFlags' and 'WithoutFlags' extension methods for enumerations

These two extension methods (strictly-speaking they are extensions for all
structs) enable the addition/removal of values to/from a FlagsAttribute-based
enumeration value.

If these methods are misused (with a non-enumeration struct, or a non-flags
enumeration) then an exception is raised.
Trivial refactoring of EnumExtensions.IsDefinedValue()

This simply removes an unneeded internal method and inlines a variable.
Resolve #58 - Create extension methods for GUIDs as RFC-4122 byte arrays

The rationale for these is that the .NET framework does not comply with RFC-4122
for the format in which is stores GUIDs.  On a little-endian machine, the byte
orders of the data1, data2 and data3 blocks are in the reverse order.  The
spec states that the bytes should ALWAYS be stored in big-endian format, wheras
Microsoft's implementation stores these three blocks in native format.

These extension methods check the endianness of the current machine and (if it
is little-endian) reverses the byte orders of these three data blocks.  This
ensures that the resultant byte array or Guid complies with RFC-4122.
Resolve #61 - Where possible, the LocalRequestDispatcher handles exceptions

Now, when a RequestHandler's Handle method throws an exception, provided that
the 'Response' type to be returned possesses a constructor that takes a
'System.Exception' instance, the request handler automatically instantiates the
request using the exception that is caught.  This way, request handlers do not
need to worry about catching exceptions and returning an error response, since
this will be done by the dispatcher if possible.

* Where it is not possible to instantiate the response appropriately, the
  request dispatcher will continue to throw RequestDispatchException, as it did
  before.
Bump version number
Merge branch 'release/3.1.0' into production