* Replaced redundant code with calls for new File methods in File, Files, Image and Images prototypes
* Fixed bug in Image.getFileExtension() causing file types containing charset information from being processed correctly
* Added check to Image.update() if getURL() returns data to allow post requests with no file upload at all (e.g. via curl)
* Removed call for root.processHref() in Images.Default.Image() to reduce complexity – needs more evaluation, though
* Removed “extras” code because I just forgot I already implemented a Feature prototype
* Added global <% feature %> macro calling the main() method of the desired feature
* Added Feature.getPermission() method which can be invoked from HopObject.getPermission()
* Refactored connect feature to work with modified Feature prototype
* Added global app.data.extras collection and registerExtra() method
* Defined res.handlers.extra in HopObject.onRequest() handler to provide extra macros
* Implemented reCAPTCHA for anonymously contacting an Antville member as proof of concept
* Added User.remove() method but left it disabled until thoroughly tested
* Added check on registration whether an IP or e-mail address is blacklisted by either botscout.com or stopforumspam.com
* Removed limitation to edit running polls
* Fixed some issues in MySQL database scheme
* Moved routine for replacing version tags from init to export target in build script
* If comment contains a child comment set its status to DELETED, erase metadata (content) and prevent macro calls to display creator or modifier
* Otherwise – or if status already equals DELETED – completely remove it and its children from the database
* Added type argument to global formatDate() and format_filter() methods
* Added JSON.js module
* Added app.data.features collection
* Fixed routine for salting passwords (probably due to jQuery upgrade)
* Renamed Members.salt_js_action() method to Members.salt_txt_action()
* Metadata is now written to its own table instead of a column only
* Values are saved as JSON-like structure only for certain types (like Array or Function)
* Adding custom metadata is more generic using the new HopObject methods setMetadata(), getMetadata() and deleteMetadata()
* Searching keys and values via common SQL query is much more straightforward (no JSON-like structure involved when basic types like String and Number)