Well hopefully once I finish this assignment I'm doing I will start having a look into how to do it. Never built a ROM before but will have a go as it would be great to have a fully custom build, hopefully some might be able to figure out a custom kernel.
Custom kernel should be easier than custom ROM, seeing as full kernel sources are available. Should (theoretically) be very straight forward to build it once you have the build environment set up, and then once you've got it building, adding new features (e.g. new governors, modules etc.) is rather simple, I believe. For reference here's how to compile a kernel from source and here's how to add features to a kernel. Beyond this, I believe it is typically a case of finding the github for another kernel which implements a feature you want, figuring out which revision of the source added that feature, and making the same changes to your own source tree.
By contrast, building a custom ROM for a device with no available AOSP device tree (i.e. a device which hasn't had a source built custom ROM before, such as the Hudl) is considerably more complicated. The link posted above to the CM wiki seems to be the best resource I have come across for porting an AOSP ROM to such a device (XDA University only seems to cover porting different AOSP ROMs to devices which already have a device tree from another AOSP ROM e.g. porting ParanoidAndroid to a device which already has CyanogenMod). You need to pull various files from the device, edit a bunch of files in the AOSP source etc.
As the wiki says, it is advisable to try building a ROM or two for another device first if possible to familiarise yourself with the process etc., before attempting to build for a brand new device.