Implement create/edit/delete rule

* Custom dozer mapper to handle mapping List to/from String
mapping; The rule conditions and actions are stored as JSON
strings

* Added a maven property ${configDir} which specifies the location
of the properties file to be used for building the WAR file. The default
location is ${user.home}
Merge branch 'master' into rules-dev

Conflicts:
	src/main/java/com/ushahidi/swiftriver/core/api/service/RiverService.java
	src/test/resources/config/sql/test-data.sql
MQ messages for add/update/delete rule events
Fix property mapping between the DTO and entity

* CreateDropDTO uses java.lang.String for the drop image while
GetDropDTO uses  a GetMediaDTO. Therefore, each of these DTOs
(CreateDropDTO and GetDropDTO) needs a mapping entry in the dozer
config file.
Custom converters for rule conditions and actions

* The Jackson mapper sees the the List of action and conditions
for  rule as a list of objects. Therefore, intermedia objects are required
in (Get/Create)RuleDTO so that the actions and conditions are properly
deserialized and posted to the database
Rectify invalid test data
Add flag to trigger execution of rule actions

* Added an extra column `rule_all_conditions` in the `river_rules`
table. This column stores a flag (0 or 1) that is used to determine
the trigger of the rule's actions. i.e. if one or all conditions match
Move custom converters to com.ushahidi.swiftriver.core.support
Mapping config for RuleUpdateNotification

* Map the Rule#river.id property to RuleUpdateNotification#riverId
Add incoming drops to buckets

* The destination buckets are stored in the Drop#bucketIds property
This is a transient property and is not populated by JPA

* TODO Review storing of read drops; should be specific to a  river/bucket and account
Refactor fetching of drops from river

* At the service level, check if the river is private, check if the
requesting account has access

* Use a key/value store - java.util.Map - to store the parameter values

* Merged the RiverDao#getDrops and RiverDao#getDropsSince and
did away with the latter. The parameter list for both of these methods was
largely the same with the main variation being in how the drops are
ordered.

* Replaced the account_read_drops table with river_droplets_read and
bucket_droplets_read which will now store the read drops for a
river and bucket respectively.
Implement markDropAsRead

* Drops in a river or bucket can now be marked as read for
a specific account. For a drop to be marked as read, the querying
account must be an owner of the bucket or river otherwise a 403
will be returned.
Add photos query parameter for river drops

* When the photos parameter is specified, only the drops
with images are returned to the client
Delete river drop from bucket

* Separate endpoints for deleting BucketDrop and RiverDrops
from a bucket. Requests to delete a RiverDrop from a bucket
bear the signature: "/buckets/:id/river/drops/:drop_id". The alternative
is to include the source of the drop i.e. river or bucket in the request body
but the RFC2616 recommends that servers ignore the request body
for DELETE since there are no "defined semantics" for DELETE entity bodies
Fix MQ exchange names for rules
RESTful URI for deleting bucket drops

* Removed additional endpoint for removing river drops from a bucket
The URL signature was not in conformance with REST patterns

* Replaced the Drop#buckets  property with Drop#bucketDrops; a collection
of BucketDrop associated with the drop entity. This is a transient property and is
set by JpaDropDao#populateBuckets. On the GetDropDTO end, the bucketDrops
property has been mapped to the "buckets" JSON property.  The rest of the property
mapping is in dozer-bean-mappings.xml

* When a river/bucket drop is deleted, delete the associated read drops
Get bucket drops using date_from and/or date_to

* Added support for filtering the bucket drops using dates;
date_from and date_to. BucketsController expects the
dates to be in dd-mm-yyyy format e.g. 09-12-2012
Check permissions before deleting river

* A river can only be deleted by its creator.
Fix read/unread drops query

* Where the isRead filter parameter has been specified, wrap the
result set of the main query in a temp table and filter the result set using
the `drop_read`  column
Filter bucket drops by state

* The state parameter takes on one of two values: "read" and "unread"
and is used to distinguish between read and unread bucket drops