I should have searched a bit more!
I found this MSDN article which details out how to do it in JSOM. I was able to create sample code for myself. Posting it here to help others.
function breakInheritance() {
var clientContext = new SP.ClientContext.get_current();
var oList = clientContext.get_web().get_lists().getByTitle('TestList');
this.item = oList.getItemById(2);
// Break inheritance. If argument is 'true' then parent list
// permissions are kept as is. If 'false' then parent list
// permission are removed.
item.breakRoleInheritance(true);
this.oUser = clientContext.get_web().ensureUser('DOMAIN\\user');
var collRoleDefinitionBinding = SP.RoleDefinitionBindingCollection.newObject(clientContext);
this.roleDefs = clientContext.get_web().get_roleDefinitions();
//Assign 'Reader' permission level to user
//collRoleDefinitionBinding.add(roleDefs.getByType(SP.RoleType.reader));
//Assign '<CUSTOM PERMISSION LEVEL>' permission level to user
collRoleDefinitionBinding.add(roleDefs.getByName("<CUSTOM PERMISSION LEVEL>"));
item.get_roleAssignments().add(oUser, collRoleDefinitionBinding);
clientContext.load(oUser);
clientContext.load(item);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
console.log(item);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}