[C] Return bed location itself instead of next to bed. Fixes BUKKIT-3604

##### Issue
```Player.getBedSpawnLocation()``` currently returns a free location beside the bed, not the bed itself. There is no way to return the bed block itself for the player instead.  The implementation did return the bed block itself before [the existing contract was broken](https://github.com/Bukkit/CraftBukkit/commit/b9f7a7b211cad7b7e53ac6c7e52e105e3c0b1d20).

##### Justification
Returning the bed location itself is what happened in the past and is what is expected to happen still.

##### Breakdown
This PR consists of two commits closely related.  The ```Player.getBedSpawnLocation``` commit verifies the block at the specified coordinates is still a bed.  Player associated data for beds is not updated when bed blocks are broken.  A bed could have been broken and would fail a usable bed check even in nms code as is seen in ```nms.EntityHuman.getBed```.  It verifies the bed by loading the chunk if necessary and unloading the chunk if the method was the reason the chunk was loaded.

The second commit addresses the reasoning of why the breaking commit occurred previously.  It removes the dependency of an Ender portal return to the NORMAL world from THE_END on the CraftBukkit implementation to detect a valid location next to a bed to be returned to.  It instead implements a reproduction of nms logic to identify a valid location next to a bed.
 
##### Testing Results and Materials
I've tested this PR by:
1: verifying a player's bed location was not set (null) first, then traveling to the end and returning to the normal world's default spawn successfully
2: sleeping in a bed to set the player's bed location, then traveling to the end and returning to the normal world next to that bed
3: breaking the bed previously set for the player, then traveling to the end and returning to the normal world's default spawn

I used the following plugin to inspect a player's bed spawn location by logging the block locations involved during the tests.
[Test Source](https://github.com/EdGruberman/bukkit-test/blob/master/BUKKIT-3604/src/edgruberman/bukkit/bukkit_3604/Main.java) | [Test Plugin](https://github.com/EdGruberman/bukkit-test/blob/master/BUKKIT-3604/dist/BUKKIT-3604.jar?raw=true)

##### Relevant PR(s) 
None
 
##### JIRA Ticket
[BUKKIT-3604](https://bukkit.atlassian.net/browse/BUKKIT-3604)

##### Check List
- [x] Fits Bukkit's Goals
- [x] Leaky Ticket Ready
- [x] Code Meets Requirements
- [x] Code is Documented
- [x] Code Addresses Leaky Ticket
- [x] Followed Pull Request Format
- [x] Tested Code
- [x] Included Test Material and Source
- [x] Follows Minimal Diff Policy
- [x] Uses Proper CraftBukkit Comments
- [x] Imports Are Ordered, Separated and Organised Properly