Handle page generation timings better.
Corrected some incorrect callings to the Base_Request functions.
Fixed some whitespace issues, removed some unused variables, and corrected a
typo or two!
As requested by Mark Johnson, add an optional PG flag to talks
This class no longer throws an exception on instantiation.
Some basic tests against the talk object
Support loading the test classes to perform unit  test features
Re-writing code which uses json_decode to use the built-in array conversion,
rather than doing it manually.
Added a new function to permit "system" actions without requiring a new account
Throw exceptions instead of returning false when we can't commit changes
because of a lack of privs.
Add "RequestedRoom" and "RequestedSlot" details, as these may be useful with
talk rescheduling.
Added more demo data
Permit null or empty searches to return null and empty results.
Implement cache flushing for testing purposes.
Fix unit testing for Attendees - now with 5 rows of data instead of 3!
Add functions to support searching for admin and creator users, or system calls, also improved the unit testing for these functions and added some phpdoc to the class.

* UnitTest sets up data before each call.
* UnitTest checks for admin and creator users, with or without being a system
user
* Amended the setkey function to check whether you're setting the userid
of a record, and if you are, that you're authorized to. It also stops refusing
to set empty or null values.
* write(), delete() and create() functions now use the new isAdmin/isCreator
functions
* Demo functions switch into system mode before running.
A selection of changes to the talk class around fixing and unscheduling.

* Add two new columns: intAllocatedSlotID and isLocked.
* Create a new function "unschedule()" to set a special "unscheduleable" flag on
the roomID and slotID, and unlock the talk (if it's locked).
* Create a new function to "fix" a talk in it's room and slot, then trigger a
hook action for that.
* setKey does some checks to make sure it's not being asked to bypass policy
enforced by the plugins.
* Update the unit test to support the above changes.
Various changes to support the new LimboTalks plugin. Essentially, LimboTalks
will prevent a talk from being scheduled if it's not got enough votes to make it
onto the board.

* Created the hook loader for the plugin.
* Amended NowAndNext to permit setting the time now (for unit testing)
* Amended the Room object to add the ability to lock a room (for example, if
it's for specific talks only.)
Correcting PHP_MessDetector issues and getting rid of PHP_CodeSniffer faults.
Also tweaks for Unit Testing Enhancements

* Renamed $dummyValue to $dummy in Base_Hook, and then unset the value (to stop
phpmess detector from complaining)
* Unset unused column and key values in Abstract_GenericCollection.
* Changed locksSlot to lockSlot in Object_DefaultSlotType, Collection_Direction
Screen, Collection_Timetable, Collection_NowAndNext
* Removed costs lines from Object_Resource.
* Re-ordered the Object_Attendee data to give Object_Talk a good working over.
Various changes, fixing some array logic, getting to passed Unit Tests and
enabling sorting talks.

* Created basic tests for Object_Room
* Created basic tests for talk sorting
* Fixed array data in Object_AttendeeTest
* Added room capacity to Object_Room, and a function to broker by room sizes
* Added object caching to Generic_Object::broker functions which don't currently
support it.
* Moved application code from the LimboTalks plugin to the Talk class.
* Lots of changes to the talk class, including, adding intAllocatedRoomID value,
checking whether the number of attendees exceeds the capcity of the room in the
getSelf() function, added a function to build an empty grid, marking off the
rooms and slots which are locked, added a function to sort and place talks by
number of attendees, added a function to unschedule talks without a minimum
number of attendees.