Add comments and links to a drop

* Added a new entity DropComment for the droplet_comments table

* Added DropService class for handling requests submitted to the
drops controller. Wiring for the same is in the spring configuration
file

* Suffixed the nested classes for representing drop metadata in GetDropDTO
with DTO

* Added GetCommentDTO for mapping drop comments
Use type float for latitude and longitude

* Changed the data type of the latitude and longitude properties
in GetPlaceDTO to float for consistency with the place POJO
Implement add and delete places via drops API

* Added AccountDropPlace model for table account_droplet_places
DTOs for creating links and places
Implement addTag and deleteTag

* Tags can now now be added and/or deleted via the
drops API
Generate ids for entities without auto-genarated @Id

* Added AbstractJpaDao#getLogSequeceNumber to generate
ids for entities that don't have db-generated ids.

* Changed the save method for Tag, Link and Place entities
to use EntityManager#merge. This is because the id is manually
set
Add @ResponseBody to delete methods

* Without the @ResponseBody annotation on the delete
methods, a 404 is returned to the client
Fix: Checking existence of metadata item before delete

* First check if the entity is specific to the user before proceeding
to create a new entry in the account_droplet_* tables with the
deleted flag switched on
Set email and name in GetCommentDTO account property

* The name and email are used by the client to display the
comment's author and avatar respectively
Fix logic bug

* If the metadata item being checked for exists and has not
been marked as deleted, mark as deleted and save. Otherwise,
if the item doesn't exist, create it as a "deleted" item.
Add Copyright information in license header
Refactoring: Separate DTOs for fetching and adding collaborators

* Renamed CollaboratorDTO to GetCollaboratorDTO and added
CreateCollaboratorDTO for purposes of adding/creating collaborators
Override hashCode() and equals()

* Overriding these two methods allows for object-object
comparison of Account entities
Add UnauthorizedException class

* The UnauthorizedException is thrown when the querying
account does not have adequate permissions to access the
requested resource e.g. a collaborator with readonly privileges
attempting to edit a bucket
Enforce business rules

* Return a 404 when a private bucket is requested
by an account that is not collaborating on the bucket or the creator
of the bucket

* Return a 401 when an account that doesn't own the bucket
attempts to add/edit/delete a collaborator or edit the bucket.

* In the case of deleting a bucket, the request must be made by the
creator of the bucket otherwise a 403 is returned.
Implement add and remove drops from Bucket

* Added a new model, BucketDrop to break the many-to-many relationship
between drops and buckets. This entity is only used for adding a drop to a
bucket.

* Added a @Transient buckets property to the Drop model. This is a non-persistent
property for storing the buckets that a drop has been added to

* Added JpaDropDao#populateBuckets for fetching the buckets that a drop has been
added to
Add/set missing properties to/in DTOs

* Set the collaborator email in the GetCollaboratorDTO
objects returned by BucketsController#getCollaborators

* Set the defaultLayout property in GetBucketDTO
Fix NoResultException

* This exception is thrown when calling getSingleResult()
and no entry was found in the database. The fix is to use
getResultList() so that a null value is returned when the
return list is empty.
Jackson ObjectMapper: Ignore unknown properties
JSON property mapping

* Map CreateBucketDTO#published to the "public" JSON
property